0

私はWCF Webアプリケーションを構築し、そのメソッドを有効なメソッドに公開しました

[OperationContract]
[WebGet]
string getStatistics();


[OperationContract]
[WebGet]
string getVenues(string BrandName, int limit);

構成ファイルを編集しました:

<endpoint address="json" binding="webHttpBinding"  contract="foursquare2RDF.IVenue2rdf" behaviorConfiguration="restBehavior"/>

およびサービスの動作で:

 <endpointBehaviors>
<behavior name="restBehavior">
          <enableWebScript/>
        </behavior>
      </endpointBehaviors>

私はIISでサービスをホストしましたが、ブラウザからは非常にうまく機能するので、ヒットすると:

http://localhost:83/venue2rdf.svc/json/getStatistics

それは良い結果を返します

問題は、これらのエラーが表示される場合、この安らかなサービスを利用できないことです:

OPTIONS http://localhost:83/venue2rdf.svc/json/getStatistics?{'venues':'100'} 405 (Method Not Allowed) 

XMLHttpRequest cannot load [http://localhost:83/venue2rdf.svc/json/getStatistics][1]. Origin null is not allowed by Access-Control-Allow-Origin.

私はそのコードを使用してサービスを呼び出しています:

$.ajax({
    type: "get",
    url: statisticsURL,
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) {
        eval("var x = " + msg.d);

        console.log(x);
    }
});

これまでに到達したもの:

  • 同様の質問に記載されているように $.ajax を $.getjson に置き換えてみましたが、エラー 405 が削除され、2 番目のエラーが表示されます
  • Ajax 対応の WCF サービス プロジェクトと呼ばれるものを見つけましたが、それでも新しいプロジェクトに移行したくありません
  • 私は同様の質問があることを知っていますが、すべてが適合せず、私の別のエラーを示しています
4

2 に答える 2

1

クロスドメインに移行し、同じオリジンポリシーに遭遇するため、おそらくJSONPリクエストにする必要があります。

$.getJSON(stastatisticsURL + "?callback=?", success: function (msg) {
    eval("var x = " + msg.d);

    console.log(x);
});

その?callback=?部分はjqueryに電話してJSONPにします。JSONP は特効薬ではないため、JSONP とは何かをよくお読みになることをお勧めします。WCF サービスで JSONP を有効にするには、以下を参照してください。

C# WCF Web API + JSONP

于 2012-07-27T09:09:17.507 に答える
0

jQuery を使用してクロス ドメイン WCF REST サービスを使用するには、以下のサンプルを見つけてください。

私のサービスは次のようになります。

    [ServiceContract]
    public interface IJSONPService
    {
        [OperationContract]
        [WebGet]
        string GetDate();

        [OperationContract]
        [WebInvoke]
        string PostData(string name);
    }

上記のサービスの構成エントリは次のようになります。

<services>
    <service name="Service.JSONPService">
        <endpoint address="" binding="webHttpBinding" behaviorConfiguration="json" bindingConfiguration="defaultRestJsonp" contract="Service.IJSONPService">
        </endpoint>
    </service>
</services>
<behaviors>
      <endpointBehaviors>
         <behavior name="json">
             <enableWebScript />
         </behavior>
   </behaviors>
</endpointBehaviors>
<webHttpBinding>
        <binding name="defaultRestJsonp" crossDomainScriptAccessEnabled="true">
          <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="64" maxNameTableCharCount="2147483647" />
          <security mode="None" />
        </binding>
</webHttpBinding>

crossDomainScriptAccessEnabledバインディング要素「defaultRestJsonp」の属性に注意する必要があります。これは、リクエストが JSONP 用であると判断し、クエリ文字列として来る URL からコールバック メソッドにラップされるレスポンスを適切に変換します。

次に、ページから、上記の WCF REST サービスを呼び出す以下の JavaScript を実行します。

function TestingWCFRestWithJsonp() {
                $.ajax({
                    url: "http://domain.com/Service/JSONPService.svc/GetDate",
                    dataType: "jsonp",
                    type: "GET",
                    timeout: 10000,
                    jsonpCallback: "MyCallback",
                    success: function (data, textStatus, jqXHR) {
                        alert(data);
                    },
                    error: function (jqXHR, textStatus, errorThrown) {alert('error');

                    },
                    complete: function (jqXHR, textStatus) {alert('complete');
                    }
                });
            }
            function MyCallback(data) {
                alert(data);
            }

$.ajax メソッド呼び出しの jsonpCallback プロパティを確認してください。

Web サービス呼び出しへの生の要求は次のようになります。

GET http://localhost/Service/JSONPService.svc/GetDate?callback=MyCallback&_=1343391683779 HTTP/1.1
Host: localhost
Connection: keep-alive

また、WCF REST サービスからの生の応答は次のようになります。

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: application/x-javascript
Date: Fri, 27 Jul 2012 12:21:23 GMT
Content-Length: 27

MyCallback("27\/07\/2012");

注: JSONP リクエストを実行すると、$.ajax メソッドの error/complete/success は呼び出されません。

于 2012-07-27T12:23:54.960 に答える