0

WCF にアクセスするために自動生成されたクライアントを使用する既存のコードを見てきました。自動生成されたページで提案されている元のバージョンは次のとおりです。

public int GetNumber()
{
  ServiceClient client = new ServiceClient();
  int number = client.GetNumber();
  client.Close();
  return number;
}

以下のようにリファクタリングされました。

public int GetNumber()
{
  ServiceClient client = new ServiceClient();
  return number.GetNumber();
}

クライアントが閉じられることが保証されているかどうかはわかりません(GCまたはその他のものによって)。2行のコードを追加することをお勧めしますか?

4

2 に答える 2

1

Closeメソッドを呼び出す必要があります。または、ブロックclientの終了時にオブジェクトを破棄する次のコード スニペットを使用します。using

using(ServiceClient client = new ServiceClient())
{
    return number.GetNumber();
}
于 2013-11-07T08:56:17.467 に答える
1

私が理解していることから、あなたは.Close()省略できるという点で正しいです。
不完全な非同期タスクがある限り、クライアントは、呼び出し.Close()によっても、クライアント オブジェクトがスコープ外になることによっても破棄されません。using以下のコメントの John からの (素晴らしい) リンクが示すように、WCF サービスに関する声明は不適切なようです。

于 2013-11-07T09:04:43.157 に答える