是否可以在一个 WCF 服务中托管多个服务合同?如果是这样,怎么做?我一直在谷歌搜索,有些帖子说你可以做到(但不是怎么做),其他人说这是不可能的。
当我运行服务器时,我收到此错误:
在服务“ConsoleAppWcfServer.FooService”实施的合同列表中找不到合同名称“ConsoleAppWcfCommon.IBarService”。
这是我的服务器代码:
static void Main(string[] args)
{
string serviceAddress = "net.tcp://localhost:8088/FooBarService";
// I'm stuck here as I have to pick *one* service
ServiceHost selfServiceHost = new ServiceHost(typeof(FooService));
// I can add both endpoints here, but this is what gives me the error.
selfServiceHost.AddServiceEndpoint(typeof(IFooService), new NetTcpBinding(), serviceAddress);
selfServiceHost.AddServiceEndpoint(typeof(IBarService), new NetTcpBinding(), serviceAddress);
selfServiceHost.Open();
Console.ReadLine();
selfServiceHost.Close();
}
这是客户端代码:
static void Main(string[] args)
{
NetTcpBinding netTcpBinding = new NetTcpBinding();
EndpointAddress endpointAddress = new EndpointAddress("net.tcp://localhost:8088/FooBarService");
// Call IFooService
var channelFactoryFoo = new ChannelFactory<IFooService>(netTcpBinding, endpointAddress);
IFooService channelFoo = channelFactoryFoo.CreateChannel();
Debug.WriteLine(channelFoo.FooMethod1());
// Call IBarService
var channelFactoryBar = new ChannelFactory<IBarService>(netTcpBinding, endpointAddress);
IBarService channelBar = channelFactoryBar.CreateChannel();
Debug.WriteLine(channelBar.BarMethod1());
}
我的目标是让客户端调用 Foo(或 Bar)并且只看到每个可用的方法。在我的实际应用程序中,我有大约 10 个域实体,每个实体大约有四个操作。我试图没有一个接口,其中包含 40 种方法。而且我不想托管 10 个不同的 WCF 服务来执行此操作。