3

WCF SOAP Web サービスを含む asp.net Web アプリケーションでホストされている Silverlight アプリケーションがあります。アプリケーションは、SSL を使用して HTTPS://... リンクで実行されています。IIS 7.5 を実行しているテスト サーバーに展開すると、すべて正常に動作し、期待どおりに動作します。また、ローカル マシンと上記のテスト サーバーの両方で SSL を使用して実行される RESTful WCF サービスを含む 2 つ目の Web アプリケーションもあります (ただし、この場合は Silverlight クライアントはありません)。

私の問題は、逆シリアル化が行われる部分で SOAP サービスから応答を取得するときに、Silverlight クライアントがセキュリティ エラーを受け取ることですが、それは私のローカル マシンでのみです。

    return base.Channel.EndGet...(IAsyncResult)  // <-- exception reported here:
    System.ServiceModel.CommunicationException: エラーが発生しました
    URI 'https://localmachinename.domain.com:8000/Service.svc' にリクエストを送信しようとしています。
    これは、ドメインを越えた方法でサービスにアクセスしようとしたことが原因である可能性があります。
    適切なクロスドメイン ポリシーが適用されているか、SOAP サービスに不適切なポリシーが適用されています。
    クロスドメイン ポリシー ファイルを公開するには、サービスの所有者に連絡する必要がある場合があります
    また、SOAP 関連の HTTP ヘッダーを送信できるようにします。このエラーも
    を使用せずに Web サービス プロキシで内部型を使用したことが原因です。
    InternalsVisibleToAttribute 属性。詳細については、内部例外を参照してください
    詳細。---> System.Security.SecurityException --->
    System.Security.SecurityException: セキュリティ エラーです。    
    System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse (IAsyncResult asyncResult) で
    System.Net.Browser.BrowserHttpWebRequest.c__DisplayClassa.b__9 (オブジェクト sendState) で
    System.Net.Browser.AsyncHelper.c__DisplayClass4.b__0 (オブジェクト sendState) で
    --- 内部例外スタック トレースの終了 ---
    System.Net.Browser.AsyncHelper.BeginOnUI (SendOrPostCallback beginMethod、オブジェクトの状態) で
    System.Net.Browser.BrowserHttpWebRequest.EndGetResponse (IAsyncResult asyncResult) で
    System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse (IAsyncResult 結果) で
    --- 内部例外スタック トレースの終了 ---
    System.ServiceModel.Channels.Remoting.RealProxy.Invoke (オブジェクト [] 引数) で
    proxy_2.EndGetTypes (IAsyncResult) で
    NameSpace.ClientClass.ServiceContractInterfaceImplementation.EndGetTypes (IAsyncResult 結果) で

SOAP サービスの clientaccesspolicy.xml は次のようになります。

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

私が間違っていることのヒントはありますか?デプロイされたアプリケーションは、テスト Web サーバーで正常に動作します。

2012 年 12 月 6 日: 問題は解決しません。いくつかの更新/詳細情報:
Web サービスは Windows 認証と偽装を使用します。テスト サーバーとローカル コンピューターの唯一の違いは、アプリケーション プールが異なる ID で実行されることです。どちらの場合も、技術ドメイン ユーザーです。私が見つけた唯一の違いは、ローカル マシンのユーザーが Active Directory で「委任に対して信頼されている」フラグを付与されていなかったことです。したがって、Kerberos の問題である可能性があると想定しました。ただし、安静な WCF サービスとクライアントを実行すると、これが問題になることはありませんでした。さらに、SOAP サービスに Windows フォーム クライアントを使用すると、ローカル マシンですべてが正常に動作し、意図したとおりに開発/デバッグが可能になります。
したがって、Silverlight の問題である必要があります。
私が得られないのは、この恐ろしいセキュリティエラーが、ほとんどの場合と同様にクロスドメインポリシーの問題に起因すると仮定すると、それらのドメインはどこで交差しているのかということです. すべてがローカル マシンで実行されている必要があり、他のサービスは呼び出されません。これは、IIS Express を使用して発生するべきではありませんか?
誰でも助けることができますか?

4

2 に答える 2

0

ソリューションに複数のスタートアップ プロジェクトがある場合は、サービスと適切な Silverlight プロジェクトを実行していることを確認してください。2 つの Silverlight プロジェクトがあり、clientaccesspolicy.xml を含まない間違ったプロジェクトを開始していました。

于 2016-01-26T10:19:18.757 に答える
0

clientaccesspolicy.xml はwwrootフォルダーに配置し、 crossdomain.xmlも含める必要があります。

于 2012-12-04T10:21:44.533 に答える