c# – 在一个WCF服务中托管多个合同
发布时间:2020-12-15 04:25:14 所属栏目:百科 来源:网络整理
导读:这个问题在这里已经有一个答案: Run WCF ServiceHost with multiple contracts9个 可以在一个WCF服务中托管多个服务合同吗?如果是这样,怎么样?我一直在谷歌搜索,一些帖子说你可以做(??但不是如何)和其他人说这是不可能的. 当我运行服务器,我得到这个错误
这个问题在这里已经有一个答案:>
Run WCF ServiceHost with multiple contracts9个
可以在一个WCF服务中托管多个服务合同吗?如果是这样,怎么样?我一直在谷歌搜索,一些帖子说你可以做(??但不是如何)和其他人说这是不可能的. 当我运行服务器,我得到这个错误:
这是我的服务器代码: 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),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服务. 解决方法
正如marc_s指出的那样,答案是有一个实现两个接口的服务实现类.以下是完整的工作代码.
服务器: static void Main(string[] args) { string serviceAddress = "net.tcp://localhost:8088/FooBarService"; ServiceHost selfServiceHost = new ServiceHost(typeof(FooService)); // The endpoints need to share this binding. var binding = new NetTcpBinding(); selfServiceHost.AddServiceEndpoint(typeof(IFooService),binding,serviceAddress); selfServiceHost.Open(); Console.WriteLine("The service is ready."); Console.WriteLine("Press any key to terminate service."); Console.WriteLine(); Console.ReadKey(); 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(); Console.WriteLine(channelFoo.FooMethod1()); // Call IBarService var channelFactoryBar = new ChannelFactory<IBarService>(netTcpBinding,endpointAddress); IBarService channelBar = channelFactoryBar.CreateChannel(); Console.WriteLine(channelBar.BarMethod1()); Console.ReadKey(); } Foo合同: [ServiceContract] public interface IFooService { [OperationContract] string FooMethod1(); [OperationContract] string FooMethod2(); } 酒吧合约: [ServiceContract] public interface IBarService { [OperationContract] string BarMethod1(); [OperationContract] string BarMethod2(); } Foo服务: public class FooService : IFooService,IBarService { public string FooMethod1() { return "FooMethod1"; } public string FooMethod2() { return "FooMethod2"; } public string BarMethod1() { return "BarMethod1"; } public string BarMethod2() { return "BarMethod2"; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |