jQuery.POST:调用WCF服务未被调用!

时间:2011-06-24 13:33:01

标签: wcf jquery wcf-client jquery-post

当我尝试向WCF service发送POST请求时,我无法POST the service requestcan't get response.

我正在使用 WebHttpBinding 而我的WCF service is hosted in Windows service使用PORT 8181

WCF服务方法:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/{cstid}/{deptid}/get/customer/?cstname={cstname}", 
    BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json)]
Customer CustomerGet(string cstid, string deptid, string cstname);

JQuery POST方法

jQuery.ajax({
    type: 'POST',
    url: 'http://localhost:8181/mysite/e48/91/get/customer/?',
    dataType: 'json',
    contentType: "application/json; charset=utf-8",
    processData: false,
    success: function (data) {
        alert(data);  // not getting anything  :(
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert('Error :' + textStatus);
    }
});

有人可以告诉我为什么我无法拨打此服务,我将如何解决此问题?

提前致谢!

2 个答案:

答案 0 :(得分:0)

你的UriTemplate:

/{cstid}/{deptid}/get/customer/?cstname={cstname}

您的jQuery网址:

/e48/91/get/customer/?

看起来你错过了cstname,因此运行时的值将为null,因为查询字符串参数不需要与UriTemplate匹配。你没有显示你的实现,但我猜你在查找Customer接受null,但后来没有找到实际的实例而只返回null。

答案 1 :(得分:0)

因为你的UriTemplate是

 UriTemplate = "/{cstid}/{deptid}/get/customer/?cstname={cstname}",

您至少应该传递{cstname}的参数。例如,试试这个:

jQuery.ajax({
type: 'POST',
url: 'http://localhost:8181/mysite/e48/91/get/customer/?',
data: { cstname: "nunu" },
dataType: 'json',
contentType: "application/json; charset=utf-8",
processData: false,
success: function (data) {
    alert(data);  // not getting anything  :(
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
    alert('Error :' + textStatus);
}});

在我看来,将WCF Web Http服务用于除WebGet操作之外的任何其他操作都比它的价值更麻烦。