ChannelFactory.CreateChannel()实际上是否打开了连接?

时间:2015-08-28 06:35:38

标签: c# wcf proxy channelfactory

这可能是非常了不起但是在google做了很多之后,无法得出任何结论。

我想知道" ChannelFactory.CreateChannel()实际上是打开连接还是只返回一些东西,实际连接将打开方法调用的时间。如果我不接受,这种联系将持续多久;关闭它。"

3 个答案:

答案 0 :(得分:5)

好问题。当我想知道类似的事情时,我只是在there阅读.Net的源代码。

CreateChannel方法在内部调用Open方法。如果CommunicationState不等于Opened,则Open方法与DefaultOpenTimeout一起执行。

DefaultOpenTimeout由端点绑定配置配置。

您可以看到source code

答案 1 :(得分:1)

只有在ChannelFactory中调用open()时才会打开连接。 这里的示例部分“https://msdn.microsoft.com/en-us/library/ms575250(v=vs.110).aspx

对此进行了演示

答案 2 :(得分:1)

它认为你只需要创建它:

// Sample service
public class Service : IService
{
   public void SendMessage(string message)
   {
      // do the processing....
   }
}

// Creating client connection using factory
// I can't remember the used of my asterisk here but this is use to identity the configuration name used for the endpoint.
var result = new ChannelFactory<IService>("*", new EndpointAddress(serviceAddress));
IService yourService = result.CreateChannel();

// This will automatically open a connection for you.
yourService.SendMessage("It works!");

// Close connection
result.Close();

只是我的客户端配置有多个端点:

<client>
      <!--note that there is no address on the endpoints as it will be overridden by the app anyway-->
      <endpoint binding="wsHttpBinding" bindingConfiguration="wsHttpBinding" behaviorConfiguration="standardBehavior" contract="IService" name="Service"/>
       .
       .
</client>

我使用这种方法向我的客户端连接了IIS中托管的30多种服务。顺便说一句,我只是把这个代码抓到我现有的WCF服务上,实际的实现是,ChannetFactory它包装到另一个方法,我可以简单地将我的服务作为通用类型和服务地址传递。

我在这里使用了消息模式Request Reply和.Net 4.5。