6

ajaxベースのコンポーネント(KendoUI)を使用して、WCFDataServicesによって実装されたODataエンドポイント上のエンティティを読み取り/変更したいと思います。

そもそも、サービスの実装はかなり簡単でした。

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

今、私はPUTを使用してエンティティを変更できることを期待していました。KendoUIは、素晴らしく簡単な構成インターフェースを提供し、PUT要求の生成に優れています。

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

残念ながら、サービスエンドポイントは、すぐに使用できるOPTIONSをサポートしていないようです。OPTIONSリクエストへの応答は、空のコンテンツで「501NotImplemented」です。少なくとも、応答には次のようにCORSヘッダーが含まれていることがわかりました。

<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>

「オプション」は非常に人気のある用語であるため、これをグーグルで検索するのは少し難しいことがわかりました...

この記事を見つけましたが、非常に複雑なようです。つまり、ODataはすべてRESTに関するものですが、WCFDataServicesがプリフライトリクエストを許可する簡単な方法を提供していないとは想像できません。

4

1 に答える 1

1

現在、WCF DataServicesはCORSをサポートしておらず、私が見たすべてのソリューションはハックであり、せいぜい不安定に動作します。

同じ問題が発生し、コードをWCFからWeb API2ODataソリューションに移植しました。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-エンドポイント

于 2014-10-02T14:46:49.610 に答える