静态WCF代理类对象

时间:2010-08-11 15:59:07

标签: c# wcf

  1. 我在NetTCP Binding上有一个WCF应用程序。在客户端应用程序中,我已将其代理类对象创建为静态。此客户端应用程序可能会在部署后运行4-8小时。基本上在登录窗口我创建并初始化 DataServiceClient 代理类(主要是数据库插入和更新)并在我的应用程序中使用相同的对象,直到用户关闭主窗口。 创建代理类的静态对象是否有任何不利影响(性能明智)?如果是,那我怎么能避免这种情况。在使用静态对象之前,我在每个窗口(在需要的地方)创建了单独的对象,但这增加了窗口加载时间。

  2. 如何提高WCF性能。我对它的表现感到满意,但这可能是我的错觉。

2 个答案:

答案 0 :(得分:3)

  1. 使用相同的实例没有错,但请确保您的错误处理良好。否则,当发生错误并且您必须重新启动整个应用程序时,代理对象将进入故障状态。当状态发生变化时,您可以附加一些事件。 代理对象进入故障状态后,您必须创建一个新的代理对象,无法恢复出现故障的代理对象。

  2. 我发现使用邮件头减少了我实际需要公开的方法数量,但这实际上取决于您的服务的功能。 否则我会建议尽可能使用流媒体。保持数据尽可能小。使用二进制格式化程序。

答案 1 :(得分:1)

看起来你的客户端是一个Windows窗体应用程序 - 只要你不在代理服务器上做任何多线程或回调等,静态服务代理就可以了。基本上,在这种情况下,你需要同步对静态变量的访问。

概括地讲,可以改进WCF性能

  1. 仔细设计服务合同 - 它应该是粗糙的界面而不是繁琐,以便减少服务呼叫的数量
  2. 选择适当的绑定 - TCP Binding将比HTTP绑定更快,但它可能是.NET适当的,并且可能无法通过Internet工作,因为其他端口将被阻止。如果您在同一台计算机上进行通信,则命名为管道绑定将是最快的模式