我的应用程序有2个"服务",假设一个是基本(整数)计算器,一个是浮点计算器.我将这些表达为接口,如下所示:
public interface IBasicCalculator { int Add( int a, int b ); } public interface IFloatingPointCalculator { double Add( double a, double b ); }
我想通过WCF公开这些.不幸的是,WCF似乎与以下概念密切相关:您希望公开的每个可能的操作必须通过一个服务接口 - 您不能在服务之间共享会话,从客户端开始,因为您需要创建一个很麻烦每个单独的代理,似乎没有任何"子服务"等...
所以,我已经收集到了我需要提供一个"组合"界面(一个也可能称之为外观),如下所示:
[ServiceContract] public interface ICalculatorService : IBasicCalculator, IFloatingPointCalculator { [OperationContract(Name = "AddInt")] new int Add( int a, int b ); [OperationContract(Name = "AddDouble")] new double Add( double a, double b ); }
如果我这样做,那么WCF会向客户端公开这两种方法,这些方法可以调用它们,而且它实际上都可以工作.
然而,像这样的"继承接口"似乎是笨拙的.特别是和.严格来说,一个方法表明隐藏了一个基本方法,我实际上并没有这样做.我可以省略,但后来我得到编译器警告,相当于"我想我隐藏了这个方法,你需要重命名它的方法或者把'新'放在它上面".new
int Add
new
double Add
new
new
所以,这是一个由两部分组成的问题:
我是否正在将"将所有内容组合到一个界面"逻辑中,或者实际上是否有办法使用WCF公开"子服务"或"多个链接服务"?
如果这是需要做的,有更好的方法吗?
谢谢!
我刚刚确定你可以将多个端点(每个端点使用不同的接口)暴露给同一个服务,你仍然只需要在客户端上生成一个代理lib,它可以访问所有这些,这完全解决了我的问题.