jsonp调用WCF返回错误

背景:

我创建了一个运行良好的WCF服务(.NET 3.5),由于跨域限制(该服务与包含javascript的网页位于不同的服务器上),因此需要使用JavaScript进行服务。 ,标准肥皂贴不起作用。 我更改了一些配置,根据微软博客文章向该方法添加了一个WebInvoke属性,并使该服务与GET一起工作,并确认该方法通过soapUI测试工作。 我试图在JSFiddle上建立一个例子,但因为这是一个内联网服务,我显然无法让它工作。

这是我的SVC.cs文件中的方法:(我在尝试解决这个问题时对配置文件进行了一些代码更改和更改)

// On the interface that defines the contract [OperationContract] [WebGet] string Post(string questionid, string answervalue); // In my actual service file code behine. public string Post(string questionid, string answervalue) { Guid dataid = _dataProvider.Post(questionid, answervalue); _dataProvider.Log(retval.ToString()); return dataid.ToString(); } 

现在如果我只输入URL,我会得到GUID的字符串表示,代表该值。

  http://localhost/WebPostSvc.svc/json/Post?questionid=207&answervalue=207009 returns: "04bb6445-b1af-4214-8f8b-cf66bb15467f" 

这是我想要开始工作的JavaScript:

  // string functions to allow formatted output String.prototype.format = function() { var args = arguments; return this.replace(/{(\d+)}/g, function(match, number) { return typeof args[number] != 'undefined' ? args[number] : match ; }); }; $(function() { $('.testpostbtn').click(function() { $.jsonp({ url: "ttp://localhost/WebPostSvc.svc/json/Post?questionid=207&answervalue=207009", callbackParameter: "callback", "success" : function(data) { alert(data); }, "error" : function(d, msg) { alert( "Could not post the data\ncallback={0}\ncallbackParameter={1}\nurl={2}\n{3}\n" .format(d.callback, d.callbackParameter, d.url, msg) ); } }); alert('request sent!'); }); });  

$ .jsonp方法来自:

 // jquery.jsonp 2.3.1 (c)2012 Julian Aubourg | MIT License // https://github.com/jaubourg/jquery-jsonp 

我必须使用的是从方法返回的错误,我发送到警报框:

 Could not post the data callback=_jqjsp callbackParameter=callback url=http://localhost/WebPostSvc.svc/json/Post?questionid=207&answervalue=207009 error 

返回的唯一错误消息是“错误”,这不是很有帮助。

我确信我只是错误地使用该方法,我需要知道:

我究竟做错了什么?

1)要启用get crossdomain与WCF一起使用,您可能需要配置绑定。

我从http://bendewey.wordpress.com/2009/11/24/using-jsonp-with-wcf-and-jquery/复制的示例请参阅crossDomainAccessEnabled属性。

                    

2)使用调试工具。 Chrome内置了很好的开发人员工具,在Firefox中你可以安装firebug。 这两个工具都可以捕获网络请求并为您提供一些信息。

通常,如果请求永远不会被触发,并且您仍然会收到错误,那么函数调用会出现问题,如果请求失败,则服务器上的某些内容会阻塞。 通常,您可以查看响应并获取更多信息。 如果响应返回ok,但在dataformat出错之后它就失败了。