2011-08-10 15 views
2

私は最初のSilverlightアプリケーションをプログラミングしており、Silverlight対応のWCFサービスを使用してサーバーにデータを取得して送信します。Silverlight対応のWCFサービスを展開する方法は?

SLアプリケーションをホストするSLアプリケーション+ ASP.NET MVC Webページを作成しました。

MVCアプリケーションでは、私はWCFサービスを作成し、私はSLアプリケーションでそれを消費します。ここまでは順調ですね。

Webデプロイメントを使用してプロジェクトをデプロイし、リモートホスト上で動作しますが、Fiddlerを使用しています。リモートアプリケーションが開発サーバー(AKA localhost:port)上にあるWCFサービスを使用していることがわかりました。

私はVSでWCFサービスを変更しましたが、今はリモートホストを指しています。

でも、私のサービスはリモートサーバーを指しています。クロスドメインアクセス用のxmlを作成する必要があるため、機能しません(そして、fiddlerはdomain.com/crossdomain.xmlを探していますdomain.com/virtualdirectory/crossdomain.xml)。

私の質問は次のとおりです。これはどのように扱いますか?ローカルサービスを使用してプロジェクトを作成するとよいでしょう。展開するときは、リモートサービスを使用します。

私はこれを手動で行う必要がありますか、自動的な方法がありますか?

ありがとうございました。

答えて

2

エンドポイントアドレスは、XAPパッケージに埋め込まれたファイルの一部であるServiceReferences.ClientConfigファイルに含まれています。ライブサーバーにデプロイするときは、そのファイルを更新する必要があります。

解決方法は、Silverlightパッケージのアドレスからサービスアドレスを動的に構築するクライアントプロキシクラスのファクトリメソッドを構築することです。限り、SilverlightのXAPファイルおよびサービスはに位置しているとして、あなたが再構成することなく、任意のサーバーにアプリケーションを展開することができるようになります、このような工場を使用して

public class ServiceUtil { 
    public static PeopleServiceClient GetPeopleServiceClient() { 
     BasicHttpBinding binding = new BasicHttpBinding(
      Application.Current.Host.Source.Scheme.Equals("https", StringComparison.InvariantCultureIgnoreCase) 
      ? BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None); 
     binding.MaxReceivedMessageSize = int.MaxValue; 
     binding.MaxBufferSize = int.MaxValue; 
     return new PeopleServiceClient(binding, new EndpointAddress(
      new Uri(Application.Current.Host.Source, "../PeopleService.svc"))); 
    } 
} 

Here次のコードが含まれているガイドであり、お互いに同じように。

0

サーバーのルートにclientaccesspolicy.xmlファイルを追加する必要があります。詳細については、MSDN linkを参照してください。 crossdomain.xmlも使用できますが、MicrosoftはFlashのためにそこに配置します.clientaccesspolicy.xmlが優先されます。これは、Silverlightはcrossdomain.xmlのサブセットのみをサポートするためです。

展開するまで、localhostサービスを使用することをお勧めします。デプロイすると、設定ファイルを変更したり、コードを書き込んでサービスURLを動的に見つけることができます。この例では、Silverlight XAPと同じURLにあるサービスを想定しています。

string serviceUrl = Application.Current.Host.Source.AbsoluteUri.Substring(0, Application.Current.Host.Source.AbsoluteUri.IndexOf("ClientBin/")) + "Services/DataService.svc" 
関連する問題