4

Silverlight からローカルでホストされている wcf サービスを呼び出すと、以下の例外が発生します。

Iv は、ホストのルートにある 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 path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

URI ' http://localhost:8005/Service1.svc ' への要求の試行中にエラーが発生しました。これは、クロス ドメイン構成エラーが原因である可能性があります。詳細については、内部例外を参照してください。--->

{System.Security.SecurityException ---> System.Security.SecurityException: セキュリティ エラーです。MS.Internal.InternalWebRequest.Send() で System.Net.BrowserHttpWebRequest.BeginGetResponseImplementation() で System.Net.BrowserHttpWebRequest.InternalBeginGetResponse(AsyncCallback コールバック、オブジェクト状態) で System.Net.AsyncHelper.<>c__DisplayClass4.b__3(オブジェクト sendState ) --- 内部例外スタック トレースの終了 --- System.Net.AsyncHelper.BeginOnUI(BeginMethod beginMethod、AsyncCallback コールバック、オブジェクト状態) で System.Net.BrowserHttpWebRequest.BeginGetResponse(AsyncCallback コールバック、オブジェクト状態) で System.ServiceModel System.ServiceModel.Channels.HttpChannelFactory の .Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteSend(IAsyncResult 結果)。

進行する方法についてのアイデアはありますか?

4

10 に答える 10

7

ここにリストされているデバッグ手法がいくつかあります..もう1つの役立つ投稿..

于 2008-09-23T16:37:35.967 に答える
2

基本的な Web サイトへの参照として追加し、機能したため、サービスが正しく機能していることはわかっています。Fiddler で遊んでみますが、xaml コントロールが Web ページに埋め込まれておらず、組み込みの testpage レンダラーを使用しているため、わずかな問題があります。

iv が確認した、確認が必要ないくつかのポイントを次に示します。

表示された私の質問として clientaccesspolicy.xml を追加します。

ホスト ルートに crossdomain.xml を追加します。

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

バインディングが basicHttp であることを確認してください。これは、silverlight でサポートされている唯一のものです (現在)。

サービスには次の属性が必要です。

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 

参考資料: http://weblogs.asp.net/tolgakoseoglu/archive/2008/03/18/silverlight-2-0-and-wcf.aspx

http://timheuer.com/blog/archive/2008/06/06/changes-to-accessing-services-in-silverlight-2-beta-2.aspx

http://silverlight.net/forums/t/19191.aspx

http://timheuer.com/blog/archive/2008/04/09/silverlight-cannot-access-web-service.aspx

于 2008-09-23T19:55:40.530 に答える
1

あなたの問題が同じかどうかはわかりませんが、SLアプリがコンソールでホストされているWCFサービスと通信しているときに、今週末にクロスドメインを発生させようとしたときに直面した大きな問題についてブログに書きました。

http://wallism.wordpress.com/2009/03/01/silverlight-communication-exception/

簡単に言うと、crossdomain.xmlが必要であり、'headers ="*"'は含まれていません。

Bad:
    <allow-access-from domain=""*"" headers="*" />

Good:
    <allow-access-from domain=""*"" />
    <allow-http-request-headers-from domain=""*"" headers=""*"" />

ヘッダーの*の代わりに、「SOAPAction」を使用できます(どちらの方法でも機能します)

ああ、あなたがそれを機能させるとき、あなたはそれをもう少し安全にしたいかもしれません:-)

幸運を!

于 2009-03-01T16:13:47.317 に答える
1

私が書いたテクニックのいくつかをデモンストレーションしようとしたWebキャストで利用できるいくつかのデバッグテクニック: https://www.livemeeting.com/cc/mseventsbmo/view?id=1032386656&role=attend&pw=F3D2F263

于 2008-09-23T18:26:17.937 に答える
0

私は同じ問題を抱えています。clientaccesspolicy.xmlがSilverlightクライアントアプリによって正常にフェッチされていることはわかります。私は、firefoxを介して直接要求することにより、clientaccesspolicy.xmlの形式が正しくないことを確認しました。ポリシーは、上記と同じように広く開かれています。

今ここに奇妙なひねりが来ます。clientaccesspolicy.xmlを削除し、代わりにFlashスタイルのcrossdomain.xmlポリシーファイルを追加すると、機能します。ネットワークを調べてみると、clientaccesspolicy.xmlが最初に要求に失敗し、次にSilverlightがcrossdomain.xmlにフォールバックする方法がわかります。

したがって、回避策はありますが、clientaccesspolicy.xmlを機能させて、不要なネットワークのラウンドトリップが追加されないようにすることをお勧めします。

助言がありますか?

于 2008-11-12T18:44:53.103 に答える
0

Silverlight アプリが提供されたのと同じ場所で WCF サービスを使用している場合、クロス ドメイン ポリシーは必要ありません。複数のエンティティ間に関係があるクライアントから LINQ to SQL データを返すときに、同様のエラーが発生しました。

まず、WCF サービスが正常に動作していることを確認してください。これを行うには、入力をエコーするだけの単純な ping 関数を作成します。最初にこれを呼び出すことができることを確認してください。これが機能し、他の関数がパラメーターまたは関数の戻り値のいずれかで機能しない場合。最初の関数も失敗する場合は、Fiddler などのツールを使用して、ネットワーク経由で送信されるデータを確認します。使う 。ホストの最後に localhost からのデータを表示します。http://localhost:1234./default.aspx のようなものを WCF アドレスに使用します。

于 2008-09-23T16:38:50.520 に答える
0

これについては、John Papa によるData-Driven Services with Silverlight 2という本を見つけました。私は同じ問題を抱えていましたが、この優れた本はそれをすべて説明しています。

于 2009-01-06T20:17:13.370 に答える
0

同様の問題があり、サービス参照を削除して再度追加すると、問題が解決しました。

于 2013-02-22T15:36:40.457 に答える
0

まず、Fiddler、FireBug、または同様のツールを使用してネットワーク呼び出しを調べ、Silverlight が実際にクライアント アクセス ポリシー ファイルを見つけていることを確認します。

于 2008-09-23T16:35:45.363 に答える
0

WCF サービスのエンドポイントとバインディングが正しく定義されていることを確認してください。同じアプリケーションから WCF サービスを呼び出すには、クロス ドメイン ポリシー ファイルは必要ありません。

于 2009-12-10T08:54:29.633 に答える