从JQuery发布到WCF服务

时间:2010-03-20 02:05:16

标签: jquery wcf

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

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

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

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

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

谢谢

2 个答案:

答案 0 :(得分:6)

那个WebGet不应该存在,你不应该使用jQuery getJSON函数。此方法修改数据库;它是POST方法,而不是GET

有关创建POST方法的示例,请参阅this page。主要是涉及将这些标题添加到方法中:

[OperationContract]          
[WebInvoke(Method = "POST",
           BodyStyle = WebMessageBodyStyle.Wrapped,
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json)]

您还需要确保从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
    }
});

答案 1 :(得分:1)

除了Aaron的回答,无论如何,你的网址都是错误的。

如果这是WCF服务,则您调用的URL不是“/services/myService.svc”;你需要调用实际的方法URL。由于您上面的示例没有显示您的服务的类名,我无法分辨,但通常是

/服务/服务类/方法名

使用浏览器查看顶级服务WSDL并找到方法的实际URL路径。