从JQuery发布到WCF服务

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

[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服务中设置了一个断点,它永远不会被触发。 我究竟做错了什么?

谢谢

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

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

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

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

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

这是一个正确的jQuery Ajaxpost的例子:

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

除了Aaron的答案,无论如何,你的url是错误的。

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

/服务/服务类/方法名

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