我在.NET 3.5上我有两个WPF项目,它们应该以两种方式相互通信。我认为命名管道可以通过WCF完成工作,使双工模式变得非常容易。 但是,我在一个应用程序中启动一个名为管道主机的WCF,但在另一个应用程序中无法看到它。还
pipelist.exe | findstr "MainApplication"
如果MainApplication是管道名称,则不返回任何内容(pipelist.exe是来自SysInternals的实用程序)。
我有以下app.config:
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<services>
<service name="MainApplication" behaviorConfiguration="Default">
<endpoint address="" binding="netNamedPipeBinding" name="MainApplication" contract="IMainApplication" />
<endpoint address="mex" binding="mexNamedPipeBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.pipe://localhost/MainApplication" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Default">
<serviceMetadata httpGetEnabled="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<startup>
<supportedRuntime version="v2.0.50727" />
</startup>
</configuration>
应该在Application中启动监听器的代码:
protected override void OnStartup(StartupEventArgs e)
{
var serviceThread = new Thread(ServiceCommunications);
serviceThread.Start();
base.OnStartup(e);
}
private void ServiceCommunications()
{
var host = new ServiceHost(typeof(MainApplication));
host.Open();
}
我错过了什么? 我没有得到任何异常,但是当我尝试将服务引用添加到我的第二个项目时,我找不到管道,我也不能用pipelist.exe列出它 我错过了一些基本的东西吗?
答案 0 :(得分:0)
我将ServiceCommunications方法更改为
private void ServiceCommunications()
{
var host = new ServiceHost(typeof(MainApplication));
host.Open();
while (keepAlive)
{
// Do nothing
}
host.Close();
}
它解决了这个问题。