2012-11-22 8 views
5

WCF DataServicesによって実装されたODataエンドポイントのエンティティを読み書きするために、ajaxベースのコンポーネント(KendoUI)を使用したいと考えています。WCF DataServiceはプリフライトOPTIONS要求をサポートしていませんか?

サービスの実装は、最初の場所でかなり簡単だった:

public class MyFooService : DataService<FooContext> 
{ 
    public static void SetEntitySetAccessRules(IDataServiceConfiguration config) 
    { 
     config.SetEntitySetAccessRule("Foos", EntitySetRights.AllWrite); 
    } 
} 

今、私はPUTを使用してエンティティを変更できるように期待していました。 KendoUIは素敵で簡単な設定インターフェースを提供し、PUTリクエストを生成するのに良い仕事をします。

私たちはクロスドメインリクエストを行い、CORSを使用しています。たとえば、Firefoxは、PUTを送信する前にODataサービスにプリフライトOPTIONSリクエストを送信します。

残念ながら、サービスエンドポイントはすぐにOPTIONSをサポートしていないようです:OPTIONS要求に対する応答は、空のコンテンツで "501未実装"です。私はthis articleを見つけた...「オプション」は非常に人気の用語であるので、これは困難なビットを判明したためにグーグルで

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    <!-- Enable cross-origin resource sharing --> 
    <!-- http://enable-cors.org/#how-asp.net --> 
    <httpProtocol> 
    <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     <add name="Access-Control-Allow-Methods" value="POST, PUT, DELETE, GET, OPTIONS" /> 
     <add name="Access-Control-Allow-Headers" value="content-Type, accept, origin, X-Requested-With" /> 
     <add name="Access-Control-Allow-Credentials" value="true" /> 
    </customHeaders> 
    </httpProtocol> 
</system.webServer> 

をしかし:少なくとも我々は次のように応答がCORSヘッダを持っていることを管理しますそれは非常に、非常に複雑なようです。つまり、ODataはすべてRESTに関するもので、WCF Data Servicesはプリフライトリクエストを許可する簡単な方法を提供していないとは思いませんか?

+1

WCFのODataサービスはWCFで動作し、同じWCFパイプラインを通過します。もしそうなら、この[answer。](http://stackoverflow.com/questions/11597314/origin-http-localhost-is-not-allowed-by-access-control-allow-origin/11606701#11606701)のリンクをチェックしてください。 )。 IMHOは、WCFでCORSを実装する最も簡単な方法です。 – Obaid

+0

私はこれがあなたが望むものではないことを知っていますが、私はクロスドメイン要求を扱う最も簡単な方法はIISのリバースプロキシを使用することだと思います。この方法では、自分のドメインとのみ対戦し、IISは誰から他のドメインに要求を送信します。次に、あなたのコードは他のドメインについて何も知っている必要はありません。 – lontivero

+0

これに無秩序に遭遇した。私は[this](https://stackoverflow.com/questions/19808069/wcf-dataservice-odata-and-cors)と[that](https://data.uservoice.com/forums/)にリンクしたいと思っていました。 72027-wcf-data-services-feature-suggestions/suggestions/4450449-cors-support)を参照してください。 – tne

答えて

1

現在、WCF DataServicesはCORSをサポートしていないため、私が見たすべての解決策はハックであり、せいぜい脆弱です。

私は同じ問題を抱えており、WCFのコードをWeb API 2 ODataソリューションに移植しました。 Web API 2はCORSをサポートしており、セットアップはとても簡単です。

は、Web APIに精通している場合は、このリンクをチェックアウト:ここ http://msdn.microsoft.com/en-us/magazine/dn532203.aspx

とは、Web APIでのODataエンドポイントを作成する方法についてのチュートリアルです:私はそれを取る http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v3/creating-an-odata-endpoint

+0

ありがとうございます。答えは遅いですが(私はWebAPIに切り替えることで問題を解決しました:-)) - これは将来の読者にとって私が知る限り有益な答えとなります。 – chiccodoro