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