English 中文(简体)
ChannelFactory. 密克什·伊利特·加奈尔。 近距离
原标题:
  • 时间:2009-05-14 22:59:28
  •  标签:

考虑以多种渠道性实例为特征的以下法规:

WSHttpBinding myBinding = new WSHttpBinding();
EndpointAddress myEndpoint = new EndpointAddress(
   ConfigurationSettings.AppSettings["HelloWorldServiceURL"]);  

ChannelFactory<IHelloWorldService> myChannelFactory = 
   new ChannelFactory<IHelloWorldService>(myBinding, myEndpoint);

IHelloWorldService proxy = myChannelFactory.CreateChannel();
((IClientChannel)proxy).Open();
HelloWorldDataContract dc = proxy.SayHello();
((IClientChannel)proxy).Close();

请注意,代理时。 “开放”指频道状态和海峡群岛成为“开放”。 代理。 与此相近的是,频道国家变成了“封闭”,但频道功能状态仍然是“开放”。

是否应关闭海峡库? 在许多例子中,我看不到这一点。 另外,如果有可能,请解释开放频道与开放频道工厂之间的区别。

此外,我知道。 IDisposable issue,因此,为了这个问题,除非这个问题对答案有直接影响,否则可能被忽视。

最佳回答

如你所知,海峡建筑公司根据配置建立了客户渠道。 你可能希望从现有工厂(到与锁定的同样终点)建立多个客户渠道。 如果你重新利用工厂创造渠道,就没有理由不关闭。

但是,你为什么要保持开放? http://msdn.microsoft.com/en-us/library/ms733912.aspx” rel=“noreferer” 也就是说:

Checking the value of the System.ServiceModel.ICommunicationObject.State property is a race condition and is not recommended to determine whether to reuse or close a channel.

你们可能不想再利用一个渠道,而是想简单地在频道工厂制造一个新渠道。 更多关于客户结构的内容见

问题回答

我发现,主要答案不准确,因此我在此作出答复。

很显然,微软公司在Chanles和工厂及客户中做了索尔ute mess。 文件也无济于事,因为这些文件似乎只是掩盖了我不得不进行检测的要闻。

由于与非卡列海峡有关的履约问题,在v3.5上转录了这些内容,但仅使问题复杂化。

这一点载于<代码>。 实际中程标/代码与<条码>使用的频道没有不同。 当你使用<代码>ChannelFactory.CreateChannel(创建频道时。 它是同一个地方。 相信我不是? Try:

ChannelFactory<IService> factory = new ChannelFactory<IService>();
// ...
IService service = factory.CreateChannel();
factory.Close();
service.DoIt() // Throws object disposed exception

确实,在内部,它都是同一个渠道。 我个人开始处置渠道工厂,而不是客户渠道,没有遇到任何问题。 我也尝试通过创建100 000个客户渠道和关闭<编码>ChannelFactory来做到这一点。

Another option is to use the static CreateChannel method: msdn.microsoft.com/en-us/library/aa344556.aspx

答案已经在这里,但它分散在几个评论和答复上,并非完全清楚,因此我的答复。

是否应关闭海峡海峡和海峡?

页: 1 如果你想从各个渠道创造多条通道,你就应当处理海峡群岛,该海峡将处置它为你创建的所有通道。

如果你想为每个问题(最终点、具有约束力的)创造一个渠道,那么你就应当使用

处理管道及其创建的任何渠道都将引起反对的例外情况。





相关问题
热门标签