2012-01-17 15 views
1

WCFを初めて使用しています。サービスは WCF接続性

SampleService client = new SampleService(); 

をインスタンス化されるかの方法がクライアント上で呼び出されたとき、それは接続と切断ないときにクライアントが接続されていますか?

client.sampleMethod(); 

私はクライアントに接続し、同じ接続を介して複数のメッセージを送信したいと考えています。これは可能ですか?

+1

使用時に接続され、複数のサービスを呼び出す際に問題はありません。それが完了したときに明示的に閉じることは良い考えかもしれません。 – Jontatas

答えて

1

2番目の質問に答えるには、接続は開いたままにしますby default

上記の声明の最初と明確化のためには、綴りによって異なります。まず、ClientBase<TChannel>(WCFプロキシクライアントが継承する)にはConnect()メソッドがありません。そのため、コンパイラエラーが発生するので、それを呼び出すための使用はありません。

サービスへの最初の呼び出し時にサービスへの接続が行われます。コンストラクタはクライアントオブジェクトを使用可能な状態にする以外に何もしません。サービスに接続しません。

+0

したがって、client.Close()を呼び出すまで、client.Open()は同じ接続を維持しますか?だから私はクライアントが同じ接続で複数のメッセージを送信して開くことができます。これはパフォーマンスにとって最高の戦略ですか?ありがとう – ministrymason

+0

@ administrymason正しいです。再び、それはバインディングに依存します。 basicHttpバインディングは 'Open()'を呼び出すと何もしません。最初のサービスメソッド呼び出し時に接続を開きます。 – CodeCaster

0

サービスの利用時に接続されます。また、それを書くようなら、client.Close()を呼び出す必要があります。

using(var client = new SampleServiceClient()){ 
    client.MethodA(); 
    client.MethodB(); 
} 

したがって、サービスの1つのインスタンスで複数のメソッドを呼び出すことができます。 usingステートメントを書くことによって、サービスが使用後に廃棄されることを確認します。

それとも、好きなら:

var client = new SampleServiceClient(); 
client.MethodA(); 
client.MethodB(); 
client.Close(); 
+2

いいえ、そうではありません。チャネルはclient.MetodA();の呼び出しで開かれます。間違ったエンドポイントアドレスを設定し、新しいクライアントを新規に試してみてください。これにより、新しいSampleServiceClient()ではなくMethodAを呼び出すときに例外が発生します。 – KMan

+2

btwでは、サービスプロキシでuse using文を使用しないでください。マイクロソフトは理由を説明しています。http://msdn.microsoft.com/en-us/library/aa355056.aspx – KMan

+0

@Kman Microsoftの推奨事項については知っていますが、これは正しくありません。このトピックに関する複数のブログ記事があり、これはコミュニティの議論のポイントです。これはあなたが自分のためにしなければならない選択です。 – JoJa

0

をあなたはそれがConnectメソッドです生成されたプロキシを呼び出す必要があります。

SampleServiceProxy client = new SampleServiceProxy(); 
client.Connect() 
client.SampleMethod() 
+2

クライアントでConnectを呼び出す必要はなく、メソッドをインスタンス化して呼び出すだけです。 – Jontatas

+0

あなたは正しく、私の愚かなものです:-) – msjonathan

関連する問題