引用Tasks.Dataflow

时间:2018-08-31 17:58:26

标签: c# wcf

我有两个应用程序,我想使用WCF和命名管道在它们之间进行通信。而且坏了。

如果在单独的线程中启动ServiceHost,则错误可能是由客户端引起的EndpointNotFoundException,如果是打开服务器,则是服务器端的FaultException,然后是客户端的AddressAlreadyInUseException主机在主线程中(顺便说一下,无论有什么bug,它都不起作用)。

使用here中所述的经过修改的App.config跟踪异常。

  • 两个项目都使用.NET Framework 4.7.1
  • 服务器端应用程序正在引用System.Threading.Tasks.Dataflow
  • 客户端没有引用任何值得注意的内容

1 个答案:

答案 0 :(得分:0)

故障在于引用的System.Threading.Tasks.Dataflow库以及我使用WCF的方式。它引入了很多讨厌的引用,这些引用并不是真正必要的,并且在不通知用户的情况下更改了app.config。

即使用户不希望这样做,它也会在输出目录的结果中添加assemblyBinding标签列表。其中之一看起来像这样:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
  </dependentAssembly>
</assemblyBinding>

此重新绑定是关键。我曾经启动WCF进程,用Thread.Sleep(500毫秒级)等待一段时间,然后尝试连接客户端。如果没有重新绑定,则可以正常工作。有了它虽然没有,但是因为500ms现在太低了。再提高到1s就可以了。

总结:重新绑定导致WCF的开销很小,这使我的工作安排变了。