2011-09-29 8 views
10

構成名を指定せずに、指定したエンドポイントアドレスを使用してC#でWCFサービスクライアントのインスタンスを作成する方法はありますか?構成名を指定せずに指定したアドレスのWCFサービスクライアントを作成する

はデフォルトでは、クライアントはこれらのコンストラクタを持っている:

明らか
public ServiceClient() 
    public ServiceClient(string endpointConfigurationName) 
    public ServiceClient(string endpointConfigurationName, string remoteAddress) 

理由は、最初のコンストラクタの、デフォルトの設定があります。私が望むのは、最終コンストラクタの2番目のパラメータだけを指定することです。今、私はそれを把握するためにConfigurationManagerを使用する構成要素を読んで苦労していますが、ひどく面倒です。よりクリーンな方法がありますか?

答えて

1

まあ、デフォルトのコンストラクタを使うこともできますが、すべての設定を手動でプログラムする必要があります。設定名を指定することで、サービスクライアントは自動的に.configファイルから設定を読み込みます。必要なのはどの設定を使用するかだけです(HTTPとNet.Tcpの両方に設定できます)。もちろん、remoteAddressはWCFに接続先を伝えるだけです。

クライアント設定自体の設定に問題がある場合は、WCFサービス設定ツールを使用していることを確認してください。これは、サービス設定とクライアント設定の両方で機能します。

public ServiceClient(
    System.ServiceModel.Channels.Binding binding, 
    System.ServiceModel.EndpointAddress remoteAddress) 
     : base(binding, remoteAddress) { 
    } 

あなたはエンドポイントの設定なしに、このいずれかを呼び出すことができます。

6

あなたの生成されたクライアントは、このようになりますコンストラクタを持つ必要があります。

8

.configファイルでエンドポイント構成を使用しないことをお勧めします。あなたが実際にただあなただけ行うことができますC#で、WCFサービスと構成取り扱いについて知るためにそこにあるすべてのものを知らなくてもサービスを呼び出したいしたい場合

 BasicHttpBinding basicbinding = new BasicHttpBinding(); 
     basicbinding.SendTimeout = TIMEOUT; 
     basicbinding.OpenTimeout = TIMEOUT; 
     ServiceClient client = new ServiceClient(basicbinding, new EndpointAddress(new Uri("http://xxxxx"))); 
+2

EndpointAddressクラスには、uri文字列を直接取り込むコンストラクタがあります。そこに「新しいウリ」を追加する必要はありません。 – Nyerguds

3

..:私は、通常、このような何かを。

 String url = "http:\\somehost:someport\\pathToSomeService"; 

     EndpointAddress address = new EndpointAddress(url); 
     Binding binding = new BasicHttpBinding(); 

     YourClient client = new YourClient(binding, address); 

     // Call your client methods 
     client.SomeMethod(parm1, parm2); 

上記では、サービス参照を生成していない生成されたサービスの参照ではなく、DLLではなく、実行可能で、どこにでも存在し、構成情報を必要としない前提としています。構成はありません。なし。

私は真のスタンドアロンサービスプロキシdllで上記を使用します。それは何かを提供するための呼び出し可能な実行可能ファイルに依存せずに完全に構​​成可能であるため、単語の真の意味で独立しています。

+0

これは基本的なhttpバインディングを前提としています。私は、手動で設定ファイルからサービスクライアントセクションを読み込み、プログラムでバインディングをビルドすることになりました。 – recursive

関連する問題