0

この質問が何度も回答されていることは理解していますが、何らかの理由で解決できませんでした。多くの人にとって簡単かもしれない私の問題を誰かが解決できることを願っていますが、私はシルバーライトとウェブに比較的慣れていないので、どうすればそれを理解できませんでした. インターネットで入手可能なクロス ドメイン エラーのサンプルをすべて試しましたが、修正できませんでした。私が直面しているこの問題について、一度でも助けていただければ幸いです。

Silverlight 4 クライアントから WCF サービスにアクセスしています。wwwroot に Clientacccesspolicy.xml と Crossdomain.xml があります。

[http://localhost/Remoteapp.html] を使用してファイルにアクセスできます。しかし、アプリケーションが Web サービスを呼び出そうとすると、ルートに Clientaccesspolicy.xml ファイルがあるにもかかわらず、クロス ドメイン エラーが発生します。

webdevelopmenthelper では、[http://localhost:600061/clientaccesspolicy.xml] である wcfservice ポートで clientaccesspolicy が要求されていることがわかります。これは、私のサービスが配置されている場所であり、502 応答 [接続に失敗しました] を取得しています。

ブラウザに [http://localhost/Clientaccesspolicy.xml] と入力すると、ファイルを見つけることができます。しかし、Silverlight は間違った場所でポリシー ファイルを要求しています。

設計時にはすべてが適切に機能しますが、IIS に展開すると、このエラーが発生します。

この問題を解決する方法を教えてください。事前に感謝します。

4

4 に答える 4

0

ステップ 1:crossdomain.xml次のコードを Web サービスのホスティング フォルダーに配置します。

<?xml version="1.0" ?>
<cross-domain-policy>
    <site-control permitted-cross-domain-policies="master-only"/>
    <allow-access-from domain="*"/>
    <allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>

ステップ 2: 上記の WCF Web サービスの参照を追加するときにも、Silverlight プロジェクトに同じファイルを配置します。

ステップ 3: 参照を更新し、Silverlight プロジェクトを公開します。

これらの手順を試してください。それは確かに機能します。

于 2013-08-31T11:41:35.203 に答える
0

私も同じ問題に直面しており、1 週間のトレイルの後、ルート ディレクトリに ClientAcessPolicy.xml と CrossDomainPolicy.xml があるとリクエストが処理されないことがわかりました。ClientAcessPolicy.xml と CrossDomianPolicy.xml はサービスを介して送信する必要があります。それだけ。

この問題を解決するには、以下の手順に従ってください

  1. 以下に示すように、Iservice1.cs に新しい名前空間を追加します。

    [ServiceContract(Namespace = "http://ServiceWCF")]
    
    public interface IPolicyRetriever
     {
       [OperationContract, WebGet(UriTemplate = "/clientaccesspolicy.xml")]
    
       Stream GetSilverlightPolicy();
    
       [OperationContract, WebGet(UriTemplate = "/crossdomain.xml")]
    
       Stream GetFlashPolicy();
     };
    
  2. ここで、Service1.svc ファイルを編集して編集します。

    public class PolicyClass : IPolicyRetriever
    {
        Stream StringToStream(string result)
        {
            WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml";
            return new MemoryStream(Encoding.UTF8.GetBytes(result));
        }
        public Stream GetSilverlightPolicy()
        {
            string result = @"<?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>";
            return StringToStream(result);
        }
        public Stream GetFlashPolicy()
        {
            string result = @"<?xml version=""1.0""?>
                            <!DOCTYPE cross-domain-policySYSTEM""http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"">
                            <cross-domain-policy>
                                <allow-access-from domain=""*"" />
                            </cross-domain-policy>";
            return StringToStream(result);
        }
    }
    
  3. プロジェクトの場所に両方のファイルを追加します

  4. 問題のいくつかを回避するために、ルート フォルダーに両方のファイルを追加することもできます。
于 2016-10-25T09:56:16.173 に答える
0

ステップ 1: WCF サービス ホストに clientaccesspolicy.xml ファイルまたは crossdomain.xml ファイルがあることを確認します。

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

同様の 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>

それでもうまくいかない場合は、次の手順を試してください

  1. Silver Light アプリケーションがデプロイされているサーバー (通常は ASP.NET アプリケーションの ClientBin フォルダー) で、Silverlight アプリケーション ファイルの名前を *.xap から *.zip に変更します。

  2. zipファイルの内容を抽出します

  3. ServiceReferences.ClientConfig ファイルを編集する

  4. エンド ポイント アドレスを localhost から、WCF サービスがホストされているサーバー アドレスに更新します。

  5. ファイルを保存します。コンテンツを圧縮し、名前を .xap に戻します

于 2013-08-23T04:31:04.523 に答える