我有两个应用程序,我想使用命名管道使用WCF在它们之间进行通信。它破碎了。
如果你在一个单独的线程中启动ServiceHost,那么错误就是客户端的aEndpointNotFoundException
;如果你在主线程中打开主机,那么客户端的FaultException
后面会出现AddressAlreadyInUseException
(不管这个错误是什么顺便说一句。 )。
使用修改后的App.config跟踪异常,如here所述。
错误在于引用的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中的一个小开销,导致我的时间关闭。