[英]Implementing IDisposable for WCF ChannelFactory<T>
我们有一个Web服务,用于从网站获取请求并从数据库中提取数据以返回到网站。 这一切似乎都很好,但是自从我们开发它以来,一直有一些困扰我的东西。 我从客户端建立与服务的连接的代码如下:
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识别为有效关键字。 我可以解决国家问题,它会转到System.Activities.Debugger,这对我来说似乎不对,其他人根本就没有解决。
我已经包含System.ServiceModel,System.ServiceModel.Web和System.ServiceModel.Channels,这些似乎无法解决它。
所以我的问题是:
1)我是否正确地为上述场景实现IDisposable(网站创建服务连接以检索数据)
2)如果是,那么如何解决Disposing方法中的错误?
任何帮助赞赏。
仅供参考 - 我希望做的是以下内容:
using (IIntranet proxy = factory.CreateChannel())
{
}
您是否复制了我的处置实施 ?
在这种情况下,它意味着添加为visual studio中“add service reference”命令生成的someServiceClient
类的部分内容。 它不适用于ChannelFactory<T>
类。
也许可以为ChannelFactory<T>
创建一个类似的解决方案,但代码可能不会(正如您所知)与Wcf客户端代理(继承自ClientBase<T>
)之外的任何其他方式一起工作。
State
属性属于IClientChannel
接口。 所以你可以这样使用它: ((IClientChannel)proxy).State
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.