25

MSDN へのリンクがたくさんあり、「私のマシンで動作します!」回答があるので、私がやっていることを再現するための正確な手順で質問したいと思います。私たちは既存の Web サービスを使用しているため、オンラインの多くのチュートリアルやビデオとは異なり、プロジェクトの外部で Web サービスをホストするというコンテキストで質問しています。だからここに行きます:

*** 新しい ASP.NET Web サービス プロジェクトを作成します。

「HelloWorld」Web メソッドを公開する既存の Service.asmx ファイルが付属しています。

ブラウザで表示し、「Invoke」ボタンを押します。「Hello World」文字列を返すように動作するはずです。

私のマシンでは、URL は " http://localhost:15511/WebSite5/Service.asmx "です。

*** Visual Studio の新しいインスタンスを開始し、Silverlight Web アプリケーション プロジェクトを作成します。

*** Web サービスを呼び出すためのイベント ハンドラーでボタンを 1 つ貼り付けます。私は個人的に Grid を nuke し、単純な StackPanel を使用します。例えば。

<UserControl x:Class="SilverlightApplication1.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300">
    <StackPanel>
        <Button Click="Button_Click">
            <Button.Content>
                <TextBlock Text="Test"/>
            </Button.Content>
        </Button>
    </StackPanel>
</UserControl>

Button_Click のステートメントとイベント ハンドラーを使用して、Web 参照を追加します。

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        ServiceSoapClient client = new ServiceSoapClient();
        client.HelloWorldCompleted += (object s, HelloWorldCompletedEventArgs ea) => { 
            MessageBox.Show(ea.Result); 
        };
        client.HelloWorldAsync();
    }

実行すると、もちろん、クロスドメインの問題のために爆発します。次に、次のようにclientaccesspolicy.xmlファイルを、サービスをホストする Web アプリケーションのルートに追加します。

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

ヘッダー、URI、およびリソースのワイルドカードがあるため、これで問題が解決するはずですよね?

  • もう一度実行すると、エラーが発生します。

URI ' http://localhost:15511/WebSite5/Service.asmx ' への要求の試行中にエラーが発生しました。これは、適切なクロスドメイン ポリシーを設定せずにクロスドメイン方式でサービスにアクセスしようとしたか、SOAP サービスに適していないポリシーが原因である可能性があります。クロスドメイン ポリシー ファイルを公開し、SOAP 関連の HTTP ヘッダーを送信できるようにするために、サービスの所有者に連絡する必要がある場合があります。

質問: clientaccesspolicy ファイルに秘密はありますか? 代わりに crossdomain.xml を試すこともできますが、同様の結果が得られます。

4

13 に答える 13

8

この問題 (SL v5.0 および Visual Studio 2010) が発生しました。解決したのは、Silverlight プロジェクトのプロパティ >> Silverlight タブに移動し、[ブラウザーで実行するときに昇格した信頼が必要] を選択したことです。

于 2013-09-20T16:05:19.670 に答える
5

私はこの同じ問題を数回経験しました。過去に、Web アプリをスタートアップとして使用することでこれを解決しましたが、既にそれを行っているようです。

この件に関する私の投稿: http://www.donnfelker.com/silverlight-cross-domain-issue/

于 2009-02-16T21:40:57.137 に答える
4

clientaccesspolicy.xml ファイルを IIS Web ディレクトリのルートに置いていることを確認してください。

C:\Inetpub\wwwroot\clientaccesspolicy.xml

これにより、http:///clientaccesspolicy.xml で直接アクセスできるようになります。

同じエラーが発生していたので、上記の手順を実行して解決しました。

于 2011-08-03T04:46:15.997 に答える
2

クライアント構成

おそらく、ServiceReferences.ClientConfigSilverlight クライアントが間違った URL を指しているのではないでしょうか?

また、クロスドメイン ポリシー ファイルの場所も確認してください。詳細については、このMSDN の記事を参照してください。

ローカルで実行中の Silverlight

Silverlight をローカルで実行する場合の追加の注意事項 (たとえば、Vista サイドバー)。このブログ エントリで報告されているように、「Silverlight は、ローカルで実行している場合、どのネットワーク プロバイダーも使用できません。」 この状況での回避策は、javascript を使用して Web サービスに接続することです。

于 2009-01-16T18:36:35.973 に答える
2

私にとってうまくいったことは、ここの Silverlight フォーラムで見つけたものから始まりました。基本的に、localhost (http://localhost/clientaccesspolicy.xml) から clientaccesspolicy.xml または crossdomain.xml にアクセスできるかどうかを尋ねられました。そこに移動しようとしたとき、できなかったので、両方のコードを (前述のスレッド内でも) 見つけ、inetpub\wwwroot\ ディレクトリに存在するそれらのファイル内のコードをコピーして貼り付けました (私はNotepad ++を使用してそれらを開きました)。奇妙な部分は、コードがまったく変更されていないことでしたが、それでも動作します! それが誰かを助けることを願っています! これは非常に奇妙でした。

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>

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>

恵まれる!

-sf

于 2012-04-27T15:46:53.433 に答える
1

InternetExplorerの設定を変更しました。WebサイトはインターンWebサーバーで実行されているため、Iexplorerの信頼済みサイトリストに追加しました。([ツール]->[インターネットオプション]->[セキュリティ]->[サイト])。

次に、セキュリティレベルを変更し、クロスドメインを有効にしました。完了しましたが、解決策を見つけるのに時間がかかりました。

最高、ジェッペン

于 2011-08-12T11:32:23.713 に答える
1

プロジェクト内でサービスを参照すると、ファイル「Reference.ClientConfig」が作成され、次のような状況があることに注意する必要があります。

    **

<endpoint address="http://localhost:57675/Servis.asmx" binding="basicHttpBinding"
            bindingConfiguration="ServisSoap" contract="ServiceReference1.ServisSoap"
            name="ServisSoap" />

**

ページがまだ同じポートを使用していることを確認してください (たとえば、ここでは 57675 です)。デフォルトでは、ローカルホストはランダムなポートを取得するため、動的ではなく静的な番号に変更する必要があります。(asp.netプロジェクト/タブWeb/特定のポート/タイプ番号を右クリック

于 2012-01-20T21:51:10.483 に答える
1

IE でこれを使用するときにフィドラーを試してみましたか? 探しているクロス ポリシー ファイルなど、Silverlight が引き起こしているトラフィックを確認できる場合がありますか?

于 2009-02-12T10:42:45.673 に答える
0

問題は、開発サーバーがxmlファイルを提供できないことである可能性があります。これを試してください-WebGetを介して明示的に利用可能にしてください

[ServiceContract]
    public interface ICrossDomainService
    {
        [OperationContract]
        [WebGet(UriTemplate = "ClientAccessPolicy.xml")]
        Message ProvidePolicyFile();
    }

次に、ProvidePolicyFile()は次のようになります。

public System.ServiceModel.Channels.Message ProvidePolicyFile()
        {
            FileStream filestream = File.Open(@"ClientAcessPolicy.xml", FileMode.Open);
            // Either specify ClientAcessPolicy.xml file path properly
            // or put that in \Bin folder of the console application
            XmlReader reader = XmlReader.Create(filestream);
            System.ServiceModel.Channels.Message result = Message.CreateMessage(MessageVersion.None, "", reader);
            return result;
        }
于 2010-08-26T15:26:20.377 に答える
0

私はこのようなものに遭遇し、ServiceHostFactoryを追加すると問題が修正されました。クロスドメインポリシーファイルだけでは修正されませんでした。

class MyHostFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        MyHost customServiceHost =
          new MyHost(serviceType, new Uri("[Your URL goes here]",UriKind.Absolute));

        return customServiceHost;
    }
}

class MyHost : ServiceHost
{
    public MyHost(Type serviceType, params Uri[] baseAddresses)   base(serviceType, baseAddresses)
    { }

    protected override void ApplyConfiguration()
    {
        base.ApplyConfiguration();
    }
}

また、サービスを定義するタグにFactory="MyHostFactory"を追加する必要があります

于 2009-01-21T14:21:43.467 に答える
0

それは私の pc で正常に動作しました。

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>

プロジェクト ディレクトリと Web サービス ルートの両方。

于 2012-11-21T13:58:43.743 に答える
0

私は同じ問題に直面していて、問題を解決するのに 3 日以上かかりました。また、別の Web サーバーでホストされている Silverlight アプリからインターネット クラウド サービス WCF を呼び出していたときに、クロス ドメイン エラーが表示されることにも気付きました。いくつかの投稿を調べた後、サービスのルート ディレクトリに cross-domain.xml および clientaccesspolice.xml ファイルを配置しても、問題は解決しませんでした。したがって、 http://example.comを使用する代わりに、安全なhttps://example.comに変更するだけで問題なく動作しました。クロスドメイン エラーが表示されなくなります。サービスは問題なく呼び出されました。

于 2015-11-23T16:56:09.437 に答える
-1

どのプロジェクトがデフォルトに設定されているかを確認します。デフォルトに設定するのは、Silverlight プロジェクトではなく、Web プロジェクトである必要があります。

于 2013-04-19T18:50:38.360 に答える