请帮助我解决这个问题。
我有一个使用WCF的客户端。我不希望该客户端知道它是从服务获取数据的。我想使用这样的模型,这样我就可以更轻松地对代码进行单元测试,并在以后替换给定接口(interface)的实现。该模型的问题在于我无法在ChannelFactory上调用close。我不确定是否需要关闭电话,但感觉不错。
所以我的问题是:
当客户端仅应知道服务接口(interface)时,是否有人知道关闭ChannelFactory的良好模式?还是ChannelFactory自己被某种魔术自身关闭了?
以下是一些示例代码,希望您能理解该问题:
static void Main(string[] args)
{
ITestService service = GetTestService();
Console.WriteLine(service.GetData(42));
}
private static ITestService GetTestService()
{
var cf = new ChannelFactory<ITestService>(new WSHttpBinding(), new EndpointAddress("http://localhost:8731/TestService/"));
return cf.CreateChannel();
}
谢谢,
盖特
最佳答案
解决此问题的最佳方法是在需要时一直保持对ChannelFactory
的引用。因此,请从ChannelFactory
方法中创建GetTestService
,并在类初始化时创建工厂(例如在构造函数中),并在不再需要工厂时将其关闭(例如在类的Dispose
方法中)。ChannelFactory
是一个工厂类,您可以根据需要重复使用多次,因此无需在每次需要服务实现时都创建它。
关于wcf - 当客户端仅知道接口(interface)时,需要一种关闭ChannelFactory的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1576559/