2

完全に機能し、Silverlightアプリケーション自体でホストされているWCFサービスにアクセスできるSilverlightアプリケーションがあります。使用しているポートは1794です。

他のサーバー(開発またはテストまたはステージング)に展開すると、アプリケーションはWCFサービスにアクセスできません。

これは私のServiceReference.ClientConfigからのスニペットです。

<endpoint address="http://localhost:1794/MyWebService.svc"
                binding="customBinding" bindingConfiguration="CustomBinding_MyWebService"
                contract="ConfigMgmtServiceReference.MyWebService"
                name="CustomBinding_MyWebService" />

私のルートフォルダには、clientaccesspolicy.xmlファイルも含まれています。

どうすればこの問題を乗り越えることができますか?

4

1 に答える 1

1

が問題の原因であると思わlocalhost:1794れます。Silverlightアプリケーションがクライアントマシンで実行されると、ローカルホストはそれをサーバーに戻しません。

このような問題を排除するために私が使用する手法は、実行時にエンドポイントをプログラムで設定することです。必要な2つの情報は、サービスのWebプロジェクト内の場所(事前にわかっている)と、Silverlightアプリが提供されたアドレス(ドメイン)(私が知ることができる)です。

    private void initEndpoint(ServiceEndpoint endPoint, string serviceName)
    {
        Uri hostUri = Application.Current.Host.Source;
        string wcfBaseUri = string.Format("{0}://{1}:{2}/WebServices/", hostUri.Scheme, hostUri.Host, hostUri.Port);

        endPoint.Address = new EndpointAddress(new Uri(wcfBaseUri + serviceName));
    }

このコードでは、フォルダー/WebServicesは私のWebサービスが私のWebアプリ内にある場所です。次に、次のように関数を呼び出します。

        LoggingServiceClient loggingService = new LoggingServiceClient();
        initEndpoint(loggingService.Endpoint, "LoggingService.svc");

私の実際のセットアップはそれよりも少し複雑です。なぜなら、それをオーバーライドして手動でエンドポイントを構成できるようにしたいのですが、ポイントを取得できます。これを行うことで、Webサーバーを奇数のポートで実行し、あらゆる種類のセットアップにデプロイすることができ、silverlight->webserviceビットは毎回機能します。

于 2010-02-05T22:39:11.330 に答える