我在通过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”,但是正在命中错误处理程序回调而不是成功回调。有谁知道我做错了什么?
答案 0 :(得分:0)
好吧,我设法自己解决了这个问题。如果有人正在阅读此内容并且很好奇,我更改了WCF服务和Web应用程序,以便它们现在都通过IIS而不是Visual Studio的Web服务器运行。
所以我现在有了
http://localhost/WcfService1/Service1.svc/GetData?value=1
http://localhost/WebApplication1/
我认为由于跨域请求,它之前无法正常工作。即使它是相同的域,只是不同的端口号,我相信这仍然算作跨域?