我有两个应用程序,我想使用WCF和命名管道在它们之间进行通信。而且坏了。
如果在单独的线程中启动ServiceHost,则错误可能是由客户端引起的EndpointNotFoundException
,如果是打开服务器,则是服务器端的FaultException
,然后是客户端的AddressAlreadyInUseException
主机在主线程中(顺便说一下,无论有什么bug,它都不起作用)。
使用here中所述的经过修改的App.config跟踪异常。
答案 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的开销很小,这使我的工作安排变了。