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.netWebアプリケーションプロジェクトを作成します。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 Net Consoleで、Webサービス呼び出しが「200OK」のステータスコードを返していることがわかりますが、成功コールバックではなくエラーハンドラコールバックがヒットしています。誰かが私が間違っていることを知っていますか?

4

1 に答える 1

0

さて、私は自分でこれを解決することができました。これを読んで興味のある方のために、WCF サービスと Web アプリケーションを変更して、Visual Studio の Web サーバーではなく IIS を介して両方が実行されるようにしました。

だから私は今持っています

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

クロスドメイン リクエストが原因で、以前は機能していなかったと思います。ドメインは同じで、ポート番号が異なるだけですが、これはクロスドメインとしてカウントされると思いますか?

于 2012-12-16T04:36:25.057 に答える