我有一个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服务中设置了一个断点,它永远不会被触发。我做错了什么?
谢谢
答案 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路径。