0

問題:

RIA アプリケーションから Self Hosted ADO.NET Data Services にアクセスできないという問題が存在します。

私のサービスは、リッチ インターネット アプリケーション (RIA) を使用して Web プロジェクトとは別にホストされています。

別のSilverlight (および Flash) クライアント アプリからのアクセスを有効にする必要があります。

Silverlight から ADO.NET Data Service (個別にセルフ ホスト) を呼び出そうとすると、例外が発生します (以下を参照)。これは、Silverlight がクロス ドメイン呼び出しを禁止しているためだと思います。

System.InvalidOperationException: 変更の保存中にエラーが発生しました。詳細については、内部例外を参照してください。---> System.Data.Services.Http.WebException: 'HttpWebResponse.NormalizeResponseStatus' で内部エラーが発生しました。System.Data.Services.Http.HttpWebResponse.NormalizeResponseStatus(Int32& statusCode) で System.Data.Services.Http.HttpWebResponse..ctor(HttpWebRequest 要求、Int32 statusCode、文字列 responseHeaders) で System.Data.Services.Http.HttpWebRequest で。 CreateResponse() at System.Data.Services.Http.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) at System.Data.Services.Client.QueryAsyncResult.AsyncEndGetResponse(IAsyncResult asyncResult) --- 内部例外スタック トレースの終了 --- System. Data.Services.Client.BaseAsyncResult.EndExecute[T](オブジェクト ソース、文字列メソッド、Curo.Silverlight.MainPage. <>c__DisplayClass1.<.ctor>b__0(IAsyncResult ar) System.Data.Services.Client.BaseAsyncResult.HandleCompleted() で System.Data.Services.Client.QueryAsyncResult.AsyncEndGetResponse(IAsyncResult asyncResult) で System.Data.Services. Http.HttpWebRequest.ReadyStateChanged() System.Data.Services.Http.WebException: 'HttpWebResponse.NormalizeResponseStatus' で内部エラーが発生しました。System.Data.Services.Http.HttpWebResponse.NormalizeResponseStatus(Int32& statusCode) で System.Data.Services.Http.HttpWebResponse..ctor(HttpWebRequest リクエスト、

ノート:

私が読んだことによると、ADO.NET データ サービスに関してクロス ドメイン アクセスは禁止されているようです。その結果、純粋な REST フレームワークを使用するなど、データ アクセスに別のアプローチを取らなければならなくなる可能性があります。

「クロス ドメイン ADO.NET Data Services の問題は、思ったよりも複雑で、まだ解決されていません。Microsoft としばらく話し合いましたが、うまくいかない理由は、その問題に関係しています。ブラウザ レベルのトランスポートを使用しており、そのトランスポートではクロスサイト スクリプティングが許可されていません。」

参照: http://forums.silverlight.net/forums/p/70925/170703.aspx#170703

クロス サイト スクリプティングを制限しながら、アクセス ルールを定義する ClientAccessPolicy.xml ファイルを公開する必要がある場合があることを理解しています。

RIA アプリケーションが同じ LAN 上で実行されることにも注意してください。

質問:

RIA クライアントが同じファイアウォールの内側で実行されることを考慮して、RIA クライアントからサービスにアクセスする実行可能な手段はありますか? もしそうなら、どのように?

セルフ ホスト型 ADO.NET データ サービスから ClientAccessPolicy.xml を正確に公開するにはどうすればよいですか?

サービスへの外部アクセスを許可するには、どのように進めることをお勧めしますか? - 別の REST フレームワーク? - 分離を犠牲にして、同じ Web プロジェクト内でサービスをホストしますか? - 他にアドバイスがあれば...

ありがとう。

4

2 に答える 2

1

あなたの問題を完全に理解しているかどうかはわかりませんが、少なくとも、サービスのルートフォルダーに clientaccesspolicy.xml ファイルと crossdomain.xml ファイルがあることを確認します。xml ポリシー ファイルがドメインのルート フォルダーにあることが重要です。たとえば、サービスが mycompany.com/services でホストされている場合、xml ファイルは services フォルダーではなく mycompany.com フォルダーにある必要があります。

ClientAccessPolicy.xml の例を次に示します。

<?xml version="1.0" encoding="utf-8" ?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="*"/>
      </allow-from>
      <grant-to>
        <resource include-subpaths="true" path="/"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

次に、crossdomain.xml の例を示します。

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
    <allow-http-request-headers-from domain="*" headers="*" />
</cross-domain-policy>

フラッシュとシルバーライトの両方に両方のファイルを使用することをお勧めします。上記の両方のファイルは、すべてのフラッシュ アプリと Silverlight アプリからのオープン アクセスを許可しますが、ファイアウォールの内側にいる場合は問題になりません。

ファイアウォールの背後にある Silverlight アプリの 1 つでこの正確な問題が発生し、これらのファイルを配置すると問題が解決したようです。これらのファイルから始めて、そこから始めます。

于 2009-10-15T16:51:29.437 に答える
0

「クロス ドメイン ADO.NET Data Services の問題は、思ったよりも複雑で、まだ解決されていません。Microsoft としばらく話し合ってきましたが、うまくいかない理由は、その問題に関係しています。ブラウザ レベルのトランスポートを使用しており、そのトランスポートではクロスサイト スクリプティングが許可されていません。」

参照: http://forums.silverlight.net/forums/p/70925/170703.aspx#170703

クロスドメイン ポリシーは (上記の Ben McCormack による回答に示されているように) によって必要とされます。

集約されたフィードへのクロス ドメイン アクセスを許可するように設定された Yahoo パイプを利用することで、Silverlight アプリケーション内から ADO.NET Data Services (以前の Astoria、現在は OData) を外部で使用できる場合があります。

ほとんどの場合、Odata が提供するデータセットをクエリする際の忠実度は失われますが、これは yahoo パイプで再作成される可能性があります。

問題は ADO.NET データ サービス (OData) ではなく、クロス ドメイン呼び出しを許可しない Silverlight にありました。

于 2010-06-30T08:13:35.027 に答える