引用Tasks.Dataflow时WCF中断

问题描述 投票:0回答:1

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

如果你在一个单独的线程中启动ServiceHost,那么错误就是客户端的aEndpointNotFoundException;如果你在主线程中打开主机,那么客户端的FaultException后面会出现AddressAlreadyInUseException(不管这个错误是什么顺便说一句。 )。

使用修改后的App.config跟踪异常,如here所述。

  • 这两个项目都使用.NET Framework 4.7.1
  • 服务器端应用程序引用System.Threading.Tasks.Dataflow
  • 客户端没有引用值得注意的任何内容
c# wcf
1个回答
0
投票

错误在于引用的System.Threading.Tasks.Dataflow库以及我使用WCF的方式。它引入了一堆恼人的引用,这些引用并不是必需的,它会在不告诉用户的情况下改变app.config。

它将assemblyBinding-Tags列表添加到输出目录的结果中,即使用户不希望这样做。其中一个看起来像这样:

<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-Process,等待一段时间使用Thread.Sleep(500ms-ish),然后尝试连接客户端。没有重新绑定,这工作得很好。虽然它没有,因为现在500毫秒太低了。斜坡高达1s再次正常工作。

总结:重新绑定会导致WCF中的一个小开销,导致我的时间关闭。

© www.soinside.com 2019 - 2024. All rights reserved.