从JQuery发布到WCF服务

Vil*_*ger 2 wcf jquery

我有一个WCF服务(称为"myservice.svc"),它接收来自用户的消息并将其保存到数据库.它以数字的形式向用户返回响应.此操作如下所示:

[OperationContract]
[WebGet]
public string SubmitMessage(string message)
{
  try
  {
    // SAVE TO DATABASE
    return "1";
  }
  catch (Exception ex)
  {
    return "0";
  }
}
Run Code Online (Sandbox Code Playgroud)

我想从一些JQuery调用此操作.我正在使用此处显示的方法:

$.getJSON(
  "/services/myService.svc",
  {message:"some text"},
  function (data) {
    alert("success");                
  }
);
Run Code Online (Sandbox Code Playgroud)

奇怪的是,永远不会显示"成功"警报.另外,我在我的WCF服务中设置了一个断点,它永远不会被触发.我究竟做错了什么?

谢谢

Aar*_*ght 6

WebGet应该不存在,你不应该使用jQuery getJSON函数.此方法修改数据库; 这是一种POST方法,而不是GET.

有关创建方法的示例,请参阅此页面POST.主要是它涉及将这些标题添加到方法:

[OperationContract]          
[WebInvoke(Method = "POST",
           BodyStyle = WebMessageBodyStyle.Wrapped,
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json)]
Run Code Online (Sandbox Code Playgroud)

您还需要确保从jQuery正确地进行调用,其中包括设置contentType和其他字段; 你进行调用的方式实际上是无效的,你只是将原始文本传递给方法,而不是有效的查询字符串或有效的JSON.

此外,您使用的是错误的网址; 如果您不希望发布到端点,则需要发布到特定方法,您必须将其附加到URL.同样,链接页面应该有助于解释所有这些.

这是一个正确的jQuery Ajax帖子的示例:

$.ajax({ 
    url: "/services/myservice.svc/SubmitMessage",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    data: "{ \"message\": \"test\" }",
    dataType: "json",
    success: function(data) {
        // do something
    }
});
Run Code Online (Sandbox Code Playgroud)