我有两个应用程序,我想使用命名管道使用 WCF 在它们之间进行通信。它坏了。
如果在单独的线程中启动 ServiceHost,则错误是客户端EndpointNotFoundException
,或者服务器端FaultException
,然后在主线程中打开主机时客户端AddressAlreadyInUseException
(顺便说一句,无论错误如何,该错误都不起作用(。
异常是使用修改后的 App.config 跟踪的,如此处所述。
- 这两个项目都使用 .NET Framework 4.7.1
- 服务器端应用程序引用 System.Threading.Tasks.Dataflow
- 客户端没有引用任何值得注意的内容
错误在于引用的 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 进程,等待一段时间Thread.Sleep
(500ms-ish(,然后尝试连接客户端。如果没有重新绑定,这就可以了。有了它,虽然它没有,因为现在 500ms 太低了。将其提高到 1 秒再次工作得很好。
总结:重新绑定会导致 WCF 中的少量开销,从而中断了我的计时。