ChannelFactory.CreateChannel() 是否真的打开了连接?

Does ChannelFactory.CreateChannel() actually open connection?

可能这很明显,但在做了很多 google 之后,无法得出任何结论。

我想知道"does ChannelFactory.CreateChannel() actually open connection or it just return something and actual connection will be open the time of method call. How long this connection will be alive if I don;t close it."

仅当您在 ChannelFactory 中调用 open() 时才会打开连接。 它在此处的示例部分中进行了演示 'https://msdn.microsoft.com/en-us/library/ms575250(v=vs.110).aspx'

它认为你只需要创建这个:

// 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。

好问题。当我想知道类似的事情时,我只是在 there.

阅读 .Net 的源代码

CreateChannel 方法在内部调用 Open 方法。如果 CommunicationState 不等于 OpenedOpen 方法执行 DefaultOpenTimeout.

DefaultOpenTimeout 由端点绑定配置配置。

你可以看到 source code.