WCF问题与JSON集成

时间:2012-12-15 15:45:07

标签: json wcf

我在通过jquery / JSON调用我的WCF服务时遇到问题。

到目前为止,我已完成以下工作:

  1. 在VS 2010中,启动一个新的“WCF服务应用程序”项目。 Visual Studio然后自动生成一个名为IService / Service的示例服务,该服务具有函数

    string GetData(int value);
    
  2. 在IService.cs中我添加了WebGet属性,如下所示:

    [OperationContract]
    [WebGet(ResponseFormat = WebMessageFormat.Json)]
    string GetData(int value);
    
  3. 在我的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>
    
  4. 我构建并运行该服务,并在打开时

    http://localhost:58403/Service1.svc/GetData?value=1 
    

    在我的网络浏览器中打印出来(如预期的那样)

  5. {“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”,但是正在命中错误处理程序回调而不是成功回调。有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

好吧,我设法自己解决了这个问题。如果有人正在阅读此内容并且很好奇,我更改了WCF服务和Web应用程序,以便它们现在都通过IIS而不是Visual Studio的Web服务器运行。

所以我现在有了

    http://localhost/WcfService1/Service1.svc/GetData?value=1
    http://localhost/WebApplication1/

我认为由于跨域请求,它之前无法正常工作。即使它是相同的域,只是不同的端口号,我相信这仍然算作跨域?