我在通过 jquery / JSON 调用我的 WCF 服务时遇到问题。
到目前为止,我已经完成了以下工作:
在 VS 2010 中,启动一个新的“WCF 服务应用程序”项目。然后 Visual Studio 会自动生成一个名为 IService / Service 的示例服务,它具有以下功能
string GetData(int value);
在 IService.cs 中,我添加了 WebGet 属性,如下所示:
[OperationContract] [WebGet(ResponseFormat = WebMessageFormat.Json)] string GetData(int value);
在我的 web.config 里面我有
<?xml version="1.0"?> <configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> <system.serviceModel> <services> <service name="WcfService1.Service1" behaviorConfiguration="ServiceBehavior"> <endpoint contract="WcfService1.IService1" binding="webHttpBinding" behaviorConfiguration="AjaxBehavior" /> </service> </services> <behaviors> <serviceBehaviors> <behavior> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> <behavior name="ServiceBehavior"> <serviceDebug includeExceptionDetailInFaults="true"/> <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors> <endpointBehaviors> <behavior name="AjaxBehavior"> <enableWebScript /> </behavior> </endpointBehaviors> </behaviors> <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> </configuration>
我构建并运行服务,并在打开时
http://localhost:58403/Service1.svc/GetData?value=1
在我的网络浏览器中打印出来(如预期的那样)
{"d":"你输入了:1"}
5、我新建了一个asp.net web应用项目。在 default.aspx 中,我添加
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
var request = $.ajax({
type: "GET",
url: "http://localhost:58403/Service1.svc/GetData",
data: { value: "1" }
});
request.done(function (msg) {
alert(msg);
});
request.fail(function (jqXHR, textStatus) {
alert("Request failed: " + textStatus);
});
});
</script>
6,我构建并运行它,但不是点击完成回调,而是点击错误回调并警告“请求失败:错误”
如果我在服务代码中设置断点,我可以看到 GetData 函数被命中并且似乎成功返回。我还可以在 firebug 网络控制台中看到 Web 服务调用返回“200 OK”的状态代码,但正在命中错误处理程序回调而不是成功回调。有谁知道我做错了什么?