首页 新闻 会员 周边 捐助

WCF接口中方法太多,多达70个,怎么把这个胖接口进行拆分

0
[已解决问题] 解决于 2013-06-14 10:16

项目是Android客户端,WCF作为服务器提供数据,现在接口已经写好了,可是由于需求的添加,接口里面的方法越来越多!

 

在网上也搜索了一些资料,但是都是说的C#写的客户端,WCF服务端的例子,没有Android端的例子!

 

就是想问问怎么来拆分服务端的接口,那么Android端需要做什么改动呢?

 

希望有这方面经验的大哥能够提点建议!

wcf
TimYang的主页 TimYang | 初学一级 | 园豆:12
提问于:2013-06-08 14:12
< >
分享
最佳答案
0

接口的设计尽量精简,面向的东西更细分。WCF的一个服务可以同时兼容和提供多个接口的服务,所以只要将拆分后的接口再应用一次就好了,还不会影响现有的接口。

奖励园豆:5
today4king | 老鸟四级 |园豆:3499 | 2013-06-08 14:55

嗯,接口我们设计的确实有点烂!

 

关于“WCF的一个服务可以同时兼容和提供多个接口的服务,所以只要将拆分后的接口再应用一次就好了” 这个方案头脑里没有很明确的方案,能够具体一点嘛?

TimYang | 园豆:12 (初学一级) | 2013-06-08 14:59

@TimYang: 比如现有的服务ServiceA应用了当前接口IFat,将IFat拆分为IA和IB,为了兼容和地址不变,可以在现有的ServiceA上实现IA和IB,等客户端完全弃用IFat后再移除IFat,这样过度就没有兼容的问题了。

today4king | 园豆:3499 (老鸟四级) | 2013-06-08 15:46

@今昭: 

大哥再问一个问题啊!

你这样是把IFat接口拆成了IA和IB,那么实现他们的ServiceA不是还有很多方法吗?

 

可能是我WCF还学的不好吧,谢谢大哥的建议!

TimYang | 园豆:12 (初学一级) | 2013-06-08 21:07

@TimYang: 每隔类的工作不一样,IA的具体实现可能在类A、IB的实现可能在类B,但是作为容器类S职责就是提供服务调用,类A和类B也可以提供服务但是这个时候服务的端点就不稳定了。

today4king | 园豆:3499 (老鸟四级) | 2013-06-11 13:38

@今昭: 

MyA是不是就是你说的容器。

你的意思是不是变成这样的:

 1     public interface IA
 2     {
 3         void GetOne();
 4 
 5         void GetTwo();
 6     }
 7 
 8     public interface IB
 9     {
10         void GetThree();
11 
12         void GetFour();
13     }
14 
15     public class MyA : IA, IB
16     {
17         public void GetOne()
18         {
19             throw new NotImplementedException();
20         }
21 
22         public void GetTwo()
23         {
24             throw new NotImplementedException();
25         }
26 
27         public void GetThree()
28         {
29             throw new NotImplementedException();
30         }
31 
32         public void GetFour()
33         {
34             throw new NotImplementedException();
35         }
36     }
TimYang | 园豆:12 (初学一级) | 2013-06-12 14:54

@TimYang: 是的

today4king | 园豆:3499 (老鸟四级) | 2013-06-12 17:46

@今昭: 

那如果这样,那么在配置文件里就要指定多个Endpoint了,每个Endpoint对应一个接口了。

这样讲对不?

<services>
<service name="MyA" behaviorConfiguration="">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="" contract="IA" >
</endpoint>

<endpoint address="" binding="basicHttpBinding" bindingConfiguration="" contract="IB" >
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://192.168.23.15/FrontendWebService/"/>
</baseAddresses>
</host>
</service>
</services>

TimYang | 园豆:12 (初学一级) | 2013-06-13 11:13

@TimYang: 如果几个协议一样可以只写一个endpoint缺省比较好,最理想是用编程来取代死板的config

today4king | 园豆:3499 (老鸟四级) | 2013-06-19 11:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册