Mar*_*ann 17
在Visual Studio中使用svcutil.exe或" 添加服务引用"向导时,自动生成的许多类型之一将是客户端界面.我们称之为IMyService.还会有另一个自动生成的接口,称为类似于IMyServiceChannel实现IMyService和IDisposable的接口.在客户端应用程序的其余部分中使用此抽象.
由于您希望能够创建新频道并再次关闭它,因此您可以引入抽象工厂:
public interface IMyServiceFactory
{
IMyServiceChannel CreateChannel();
}
Run Code Online (Sandbox Code Playgroud)
在客户端应用程序的其余部分中,您可以依赖于IMyServiceFactory:
public class MyClient
{
private readonly IMyServiceFactory factory;
public MyClient(IMyServiceFactory factory)
{
if (factory == null)
{
throw new ArgumentNullException("factory");
}
this.factory = factory;
}
// Use the WCF proxy
public string Foo(string bar)
{
using(var proxy = this.factory.CreateChannel())
{
return proxy.Foo(bar);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以创建一个包含WCF ChannelFactory<T>作为实现的IMyServiceFactory的具体实现:
public MyServiceFactory : IMyServiceFactory
{
public IMServiceChannel CreateChannel()
{
return new ChannelFactory<IMyServiceChannel>().CreateChannel();
}
}
Run Code Online (Sandbox Code Playgroud)
您现在可以通过将IMyServiceFactory映射到MyServiceFactory来配置DI容器.以下是温莎城堡的表现:
container.Register(Component
.For<IMyServiceFactory>()
.ImplementedBy<MyServiceFactory>());
Run Code Online (Sandbox Code Playgroud)
奖励信息:以下是如何使用DI容器连接WCF服务.