如何更改不影响客户的WCF服务合同?

汤玛士

我是新手,但是读了一些关于wcf的文章后我才知道,如果您更改ServcieContrcat,则不仅必须更改服务端,还必须更改客户端,这真的很难管理。

Example 1:

开发人员必须创建WCF服务以进行订单处理,并具有以下功能:GetOrderById,GetOrdersByStatus,SaveOrder

ServiceContract可能如下所示

[ServiceContract]
public interface IOrderService
{
    [OperationContract]
    Order GetOrderById(int orderId);

    [OperationContract]
    List<Order> GetOrdersByStatus(OrderStatus orderStatus);

    [OperationContract]
    void SaveOrder(Order order)
} 

例如,一个月后,项目经理说:好吧,我们的客户需要另一个功能:DeleteOrderById,GetOrdersByCustomerId,不再需要GetOrdersByStatus,我们需要GetOrdersByStatusAndCustomerId

开发人员必须更新ServiceContrcat并更新客户端。如您所见,ServiceContrcat中的任何更改都非常困难

因此,我正在寻求有关如何开发wcf服务的最佳指导,如果我们扩展功能或进行任何类型的更改,不会产生任何问题,但是客户端不会遇到任何问题。谢谢

布赖恩

在此处输入图片说明我遇到了同样的问题,基本上是对方法的永久更改,这些更改会破坏客户端上的接口。

This is what I did: All of my 30+ functions (and the list grows and grows) took strings, ints and bytes() as data types as both input and output parameters, I created a master single endpoint and function that receives, as an input parameter, and sends back as the output, a single simple class. This class, called HostInterface, contains just two parameters, a string (which I use to encapsulate all my strings and ints) and a byte() array (into which I stuff all my binaries)

So, whether a client is calling something simple like Ping() with just one string param, or something complicated like ResumeDownload() with 5 strings, 2 ints and a byte array, all of those parameters get encapsulated in my HostInterface class, the strings and ints into the one String parameters (as XML) and the bytes into the byte field.

在主机端收到请求后,请按以下步骤进行:

  Function HostConnect(byval objInbound as HostInterface) as HostInterface

我解压缩objInbound中的字符串参数,将XML更改为对象,然后解压缩字节并将其添加到同一对象的字节部分。然后,我检查方法名称(ping或ResumeDownload)并进行相应处理。下图显示了基本思想-所有功能都通过单个函数进行操作,该函数采用并发送与参数相同的简单类。因此,我的界面无需更改。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

WCF:客户端配置中的合同“ X”与服务合同中的名称不匹配

WCF合同更改IsRequiredMessage

Vuex更改不影响模块

使用WCF发现无法在客户端上发现一项服务中的多个合同

如何声明另一个杰克逊ObjectMapper不影响原豆的“客户”?

如何在不影响非暂存更改的情况下丢弃git中的暂存更改

如何设置AxisProperty,使其仅影响一项服务,而不影响其他服务(轴1.4)

更改分区而不影响LUKS加密

更改文本而不影响其他属性

更改<span>而不影响<span class =“ something”>

inetd 是否简化了服务器程序,同时不影响并发处理多个客户端的部分?

服务合同的RealProxy引发WCF错误异常

如何在不影响引导 css 样式的情况下更改 <select> 元素上的边框颜色?

如何在不影响滚动条颜色的情况下更改QScrollArea的背景颜色?

如何在不影响原始数组元素的情况下更改ArrayList中的元素?

如何将if语句更改为for语句而不影响google应用程序脚本中的结果?

如何在不影响缩进的情况下更改范围的垂直对齐方式?

Swift:如何更改堆栈行的高度而不影响其他行均等填充?

如何在不影响其他参数值的情况下更改url参数值

如何在不影响先前视图的情况下更改UINavigationBar标题的名称?

如何创建NSArray副本并在不影响原始NSArray的情况下进行更改?

如何在不影响复选框的情况下更改复选框标签的宽度?

如何在不影响数据的情况下更改熊猫的索引值

Postgres:如何更改MV的名称而又不影响引用它的其他MV?

如何在不影响播放的情况下更改jPlayer播放列表的顺序?

如何在不影响<td>宽度的情况下更改<th>的宽度

如何在不影响 div 内容的情况下更改背景颜色透明度?

如何在不影响调用它的环境的情况下更改 bash 函数的环境?

更改列表元素将影响/不影响派生列表