如何在不使用svcutil.exe的情况下使用WCF服务?

问题描述:

我发现没有消费的帮助WCF服务的2种方式从svcutil.exe如何在不使用svcutil.exe的情况下使用WCF服务?

  • ClientBase<IService>
  • ChannelFactory<IService>

我知道ClientBase可能使用ChannelFactory。但我谈论写作之间的选择:

public sealed class ServiceClient 
    : ClientBase<IService>, IService 
{ 
    ReturnType IService.MethodName(ParameterType parameterName) 
    { 
     return Channel.MethodName(parameterName); 
    } 
} 

// later 
IService client = new ServiceClient(); 
var result = client.MethodName(parameterName); 

ChannelFactory<IMyService> channelFactory = new ChannelFactory<IMyService>(); 
channelFactory.Open(); 

var channel = channelFactory.CreateChannel(); 
var result = channel .MethodName(parameterName); 

channelFactory.Close(); 

哪一个我应该选择?

您有什么选择标准?

在功能上,最后,两种方法都能很好地工作,并且基本上可以为您提供相同的结果。

你想基于什么决定?

我的建议:选择你感觉更舒适的风格!与ChannelFactory<IService>的方法可能需要你写越来越少的世俗代码 - 所以也许这对于这种方法会有一点优势。

这两种方法都要求在通道的两端都有.NET,并且该服务和客户端共享与其中的服务和操作契约的通用程序集 - 因为客户端必须至少知道服务接口才能能够使用连接到服务的两种方式中的任何一种。