我们的应用程序在命名管道上使用 WCF 在两个进程之间进行通信(注意:这两个进程都不是 Windows 服务。)我们的应用程序已经在该领域运行了几年而没有发生任何事故。
我们现在收到报告称第三方应用程序(特别是 Garmin Express)的存在正在破坏我们的应用程序。我已经在内部安装了 Garmin Express 并确认了该行为。具体来说,“Garmin 核心更新服务”在运行时会导致我们的应用程序失败。
当 Garmin 服务运行时,我们应用程序的“服务”端启动并且创建 WCF 端点没有问题。但是当客户端启动并尝试连接到服务时,它会因 EndpointNotFoundException 而失败,就好像服务甚至没有运行一样。
此时,我可以从服务控制面板中停止 Garmin 服务,然后成功重新运行客户端,甚至无需重新启动我们自己的服务。如果我再次启动 Garmin 服务,则进一步尝试启动客户端会失败。所以这至少证明了我们的 WCF 服务一直在运行,并且 Garmin 软件以某种方式阻止了我们的客户端连接到它的能力。
我们使用自己的名称作为端点地址(例如“net.pipe://localhost/MyPrivateApplication”)。我已尝试将此地址更改为其他各种名称,但这对问题没有影响。
另一个应用程序怎么可能仅仅通过运行就破坏我们自己的应用程序使用 WCF 的能力?
更新:根据要求,这是来自服务端的代码片段。我已经从我们的原始代码中对其进行了简化,以试图隔离问题。到目前为止,我所做的任何更改都没有对这个问题产生任何影响。
MyService service = new MyService();
ServiceHost host = new ServiceHost(service);
string hostAddress = new Uri("net.pipe://localhost/MyWCFConnection");
host.AddServiceEndpoint(typeof(IMyService), new NetNamedPipeBinding(), hostAddress);
host.Open();