3

ウェブサイトからリクエストを受け取り、データベースからデータを抽出してウェブサイトに返すために使用されるウェブサービスがあります。すべて問題なく動作しているように見えますが、開発して以来、私を悩ませてきたものがあります。クライアントからサービスへの接続を確立するための私のコードは次のとおりです。

string bindingName = ConfigurationManager.AppSettings["BindingName"];
ChannelFactory<IIntranet> factory = new ChannelFactory<IIntranet>(bindingName);
IIntranet proxy = factory.CreateChannel();

これで、プロキシはインターフェイス内のすべてのメソッドを公開しますが、実行しないことの 1 つは、IDisposable を実装することです。それで、少しグーグルで調べた後、インターフェースを実装する必要があると言っているさまざまな人を見つけました。私は次のようにしました:

public class Service : IInternet, IIntranet, IDisposable

IDisposable は、次のような Dispose メソッドを提供します。

public void Dispose()
{
    Dispose(true);
} 

dispose メソッドは、インターネットからコピーしたもので、次のようになります。

protected virtual void Dispose(bool disposing)
{
    if (disposing)
    {
        try
        {
            if (State != CommunicationState.Faulted)
            {
                Close();
            }
        }
        finally
        {
            if (State != CommunicationState.Closed)
            {
                Abort();
            }
        }
    }
}

今私が抱えている問題は、コンパイラが State、Close、または Abort を有効なキーワードとして認識しないことです。私は State を解決でき、それは System.Activities.Debugger に行きますが、これは私にはまったく正しくないようで、他の人はまったく解決しません。

System.ServiceModel、System.ServiceModel.Web、および System.ServiceModel.Channels を含めましたが、これらは解決していないようです。

だから私の質問は:

1) 上記のシナリオ (データを取得するためのサービス接続を作成する Web サイト) に対して IDisposable を正しく実装しています
か?

どんな助けでも感謝します。

アップデート

参考までに、私がやろうとしていることは次のようなものです:

using (IIntranet proxy = factory.CreateChannel())
{  
}
4

2 に答える 2