这可能是非常了不起但是在google做了很多之后,无法得出任何结论。
我想知道" ChannelFactory.CreateChannel()实际上是打开连接还是只返回一些东西,实际连接将打开方法调用的时间。如果我不接受,这种联系将持续多久;关闭它。"
答案 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。