0

我在通过 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 
    

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

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

4

1 回答 1

0

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

所以我现在有

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

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

于 2012-12-16T04:36:25.057 回答