【问题标题】:WCF ConnectivityWCF 连接
【发布时间】:2012-01-17 09:09:18
【问题描述】:

我是 WCF 的新手。服务实例化时客户端是否连接

 SampleService client = new SampleService();

或者在客户端调用方法时,它会连接和断开连接吗?

client.sampleMethod();

我想连接到客户端并通过同一连接发送多条消息。这可能吗?

【问题讨论】:

  • 它会在使用时连接,并且多次调用该服务应该没有任何问题。完成后明确关闭它可能是个好主意。

标签: wcf


【解决方案1】:

回答你的第二个问题:连接保持打开by default

首先,作为对上述声明的澄清:它取决于绑定。对于初学者,ClientBase<TChannel>(WCF 代理客户端继承自)中没有 Connect() 方法,因此调用它是没有用的,因为这会引发编译器错误。

第一次调用服务时会建立与服务的连接;构造函数只是使客户端对象处于可用状态,它不连接到服务。

【讨论】:

  • 所以在我调用 client.Close() 之前执行 client.Open() 会保持相同的连接有效吗?所以我可以打开客户端在同一个连接上发送多条消息然后关闭。这是性能的最佳策略吗?谢谢
  • @ministrymason 是正确的。不过,这又取决于绑定。当你调用Open() 时,basicHttp 绑定不会做任何事情,它会在第一个服务方法调用时打开连接。
【解决方案2】:

当您使用该服务时,它已连接。如果您要这样编写,您还需要调用 client.Close() 。我们主要这样编写服务调用:

using(var client = new SampleServiceClient()){
  client.MethodA();
  client.MethodB();
}

所以是的,您可以在服务的一个实例上调用多个方法。通过编写 using 语句,您可以确保服务在使用后被释放。

或者如果你喜欢:

var client = new SampleServiceClient();
client.MethodA();
client.MethodB();
client.Close();

【讨论】:

  • 不,不是。在调用 client.MetodA() 时打开通道;尝试设置错误的端点地址并尝试新建一个新客户端。这将在调用 MethodA 时导致异常,而不是在新的 SampleServiceClient()
  • 顺便说一句,不要对服务代理使用 use using 语句。微软在msdn.microsoft.com/en-us/library/aa355056.aspx 解释了原因
  • @KMan 我知道微软的建议,但这不正确。已有多篇关于此主题的博客文章,这是社区中的一个讨论点。这是您必须为自己做出的选择。
  • 不过,如果产品的实际编码人员说,不要这样做,我会听的。 ;)
  • 这是服务处理中的一个错误(WCF 错误),甚至他们的解决方案也无法保存;)。虽然从来没有遇到过任何问题,所以我一直使用它,直到我遇到这个问题。 :)
【解决方案3】:

您需要调用生成的代理它的 Connect 方法。

例如

SampleServiceProxy client = new SampleServiceProxy();
client.Connect()
client.SampleMethod()

【讨论】:

  • 客户端不需要调用Connect,实例化调用方法即可。
猜你喜欢
  • 2010-11-26
  • 2011-10-27
  • 2011-02-10
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多