繁体   English   中英

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

[英]How to change WCF service contract which does not effect client?

我是新手,但是读了一些关于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服务的最佳指导,如果我们扩展功能或进行任何类型的更改,不会造成任何问题,但是客户端不会遇到任何问题。 谢谢

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

我就是这样做的:我的30多个函数(并且列表在不断增长)都将字符串,ints和bytes()作为数据类型作为输入和输出参数,我创建了一个主单端点和函数,接收输入参数,然后将单个简单类作为输出发送回。 此类称为HostInterface,仅包含两个参数,一个字符串(用于封装所有字符串和整数)和一个byte()数组(用于填充所有二进制文件)

因此,无论客户端仅使用一个字符串参数来调用诸如Ping()之类的简单事物,还是具有5个字符串,2个整数和一个字节数组的ResumeDownload()之类的复杂事物,所有这些参数都封装在我的HostInterface类中,即字符串并将int放入一个String参数(作为XML),并将字节放入byte字段。

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

  Function HostConnect(byval objInbound as HostInterface) as HostInterface

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM