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はプリフライトリクエストを許可する簡単な方法を提供していないとは思いませんか?
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
私はこれがあなたが望むものではないことを知っていますが、私はクロスドメイン要求を扱う最も簡単な方法はIISのリバースプロキシを使用することだと思います。この方法では、自分のドメインとのみ対戦し、IISは誰から他のドメインに要求を送信します。次に、あなたのコードは他のドメインについて何も知っている必要はありません。 – lontivero
これに無秩序に遭遇した。私は[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