2

私の現在の製品コードでは、msdnのドキュメントによると、クライアントを作成する方法は次のとおりです。

using (WebChannelFactory<IServiceInterface> cf
      = new WebChannelFactory<IServiceInterface>("http://service.url"))
{
    IServiceInterface client = cf.CreateChannel();
    client.CallTheMethod();
}

私がこのインターフェースを持っているとすると:

public interface IServiceInterface
{
    void CallTheMethod();
}

ただし、WebChannelFactoryによって作成されたオブジェクトクライアントもIDisposableを実装していることに気付きました。だから私もこのオブジェクトを処分したいと思います。私は他の方法を見つけられませんでした:

using (WebChannelFactory<IServiceInterface> cf
      = new WebChannelFactory<IServiceInterface>("http://service.url"))
using(IDisposable client = (IDisposable)cf.CreateChannel())
{
    ((IServiceInterface)client).CallTheMethod();
}

これは醜いです。それで :

  • 本当に処分する必要がありますか?つまり、ファクトリを破棄したときに破棄される可能性があります(ファクトリが、作成したすべてのオブジェクトへの参照を保持している場合)?
  • はいの場合、より良い方法がありますか?
4

1 に答える 1

5

これは非常に複雑な問題です。マイクロソフト自身が認めたとしても、チャネルファクトリの廃棄は悪い設計であり、何度も変更されたため、短い答えはノーです。それに代わるものを使用する必要があります。

廃棄する代わりの方法を次に示します。

于 2011-04-21T16:37:00.733 に答える