请帮助我解决这个问题。

我有一个使用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/

10-09 17:13