![](/img/trans.png)
[英]WCF: The contract 'X' in client configuration does not match the name in service contract
[英]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.