我们有一个网络服务,用于接受来自网站的请求并从数据库中提取数据以返回到网站。一切似乎都很好,但自从我们开发它以来,一直有一些事情困扰着我。我从客户端建立与服务的连接的代码如下:
string bindingName = ConfigurationManager.AppSettings["BindingName"];
ChannelFactory<IIntranet> factory = new ChannelFactory<IIntranet>(bindingName);
IIntranet proxy = factory.CreateChannel();
现在代理公开了我的接口中的所有方法,但它没有做的一件事是实现 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)我是否为上述场景正确实现了 IDisposable(网站创建服务连接以检索数据)
2)如果是这样,那么我该如何解决 Disposing 方法中的错误?
任何帮助表示赞赏。
更新
仅供参考 - 我想做的是如下所示:
using (IIntranet proxy = factory.CreateChannel())
{
}