C# WCF多个命名管道端点

C# WCF多个命名管道端点,c#,.net,wcf,C#,.net,Wcf,我想通过命名管道与两个服务进行交互。我尝试了两种方法,一种是创建两个单独的ServiceHosts,另一种是在单个服务上创建多个端点。无论我有没有第二次保养,第一次保养都很好。对于这两种情况下的第二个服务,我要么由于找不到命名管道(单独的服务)而得到端点未找到错误,要么得到地址筛选器问题(设置为Any无法修复)。我检查了又检查了我的设置,但我被难住了 服务器和客户端都使用具有约定的相同程序集: [ServiceContract(CallbackContract = typeof(IService

我想通过命名管道与两个服务进行交互。我尝试了两种方法,一种是创建两个单独的ServiceHosts,另一种是在单个服务上创建多个端点。无论我有没有第二次保养,第一次保养都很好。对于这两种情况下的第二个服务,我要么由于找不到命名管道(单独的服务)而得到端点未找到错误,要么得到地址筛选器问题(设置为Any无法修复)。我检查了又检查了我的设置,但我被难住了

服务器和客户端都使用具有约定的相同程序集:

[ServiceContract(CallbackContract = typeof(IServiceCallback1), SessionMode = SessionMode.Required)]
public interface IService1
{
    ....
}
[ServiceContract]
public interface IService2
{
    ...
}
以下是服务器端:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Reentrant, IncludeExceptionDetailInFaults = true)]
class Service1Impl : IService1
{
    ...
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, IncludeExceptionDetailInFaults = true)]
class IService2Impl : IService2
{
    ...
}
...
serviceHost1 = new ServiceHost(typeof(Service1Impl));
serviceHost2 = new ServiceHost(typeof(Service2Impl));

try
{
    serviceHost2.Open();
    serviceHost1.Open();
}
(是的,我以相反的顺序打开它们,因为客户端进程假设如果可以连接到Service1,Service2是可用的)

以下是我的服务配置:

<system.serviceModel>
    <services>
      <service name="Service1Impl" behaviorConfiguration="myServiceBehavior">
        <endpoint address="" binding="netNamedPipeBinding" contract="IService1"/>
        <host>
          <baseAddresses>
            <add baseAddress="net.pipe://localhost/Service1"/>
          </baseAddresses>
        </host>
      </service>
      <service name="Service2Impl" behaviorConfiguration="myServiceBehavior">
        <endpoint address="" binding="netNamedPipeBinding" contract="IService2"/>
        <host>
          <baseAddresses>
            <add baseAddress="net.pipe://localhost/Service2"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="myServiceBehavior">
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

客户端我不使用配置,并将其用于以下两种情况:

public class Service2Client: ClientBase<IService2>, IService2
{
    public Service2Client()
        : base(new NetNamedPipeBinding(), new EndpointAddress("net.pipe://localhost/Service2"))
    {
    }
}
public class Service2Client:ClientBase,IService2
{
公共服务2客户机()
:base(新的NetNamedPipeBinding(),新的EndpointAddress(“net。pipe://localhost/Service2"))
{
}
}
这里有我遗漏的东西吗?正如我所说,我可以连接第一个服务并对其进行调用,但是第二个服务收到EndpointNotFoundException,抱怨它找不到指定的管道