我有一个WCF服务与单个客户端进行通信。我的目标是让客户尽可能少地更新,并且当我向我的服务添加新的属性/方法时不需要更新。初学者WCF客户端/服务器松散耦合设计
我的第一种方法,因为在向我的服务添加属性/方法时打破了我的目标,所以我需要更新客户端的服务引用。
WCF服务DLL的结构如下所示:
- IMyService.cs
- MyService.cs
- Hardware Interface 1.cs
- Hardware Interface 2.cs
- Definitions.cs
在每一个硬件接口我有多个属性和方法,我想客户端访问。
目前,我公开这些属性的方式/方法,客户端是通过以下方法IMyService:
[ServiceContract]
interface IMyService
{
[OperationContract]
void MethodA(Object msg);
[OperationContract]
void MethodB(Object msg);
[OperationContract]
void MethodC(Object msg);
[OperationContract]
Object Hardware1GetProperty(Hardware1Property propID); //large switch case for all properties
[OperationContract]
void Hardware1SetProperty(Hardware1Property propID, Object val); //large switch case for all properties
[OperationContract]
Object Hardware2GetProperty(Hardware2Property propID); //large switch case for all properties
[OperationContract]
void Hardware2SetProperty(Hardware2Property propID, Object val); //large switch case for all properties
}
凡Hardware1Property和Hardware2Property存储在Definitions.cs结构如下枚举:
public enum Hardware1Property : uint
{
PropertyA,
PropertyB,
PropertyC,
}
由于客户端可以访问枚举Hardware1Property和Hardware2Property,我认为这将是一个很好的方法,因为客户端不必存储服务上所有属性的列表。因此,客户可以通过执行以下操作获取物业的价值,例如:
MyVar = MyClient.Proxy.Hardware1GetProperty(Hardware1GetProperty.PropertyA);
如何改进此设计?
- DataContracts是如何去的,如果是的话我该如何实现它们? (我以前从未使用过)
- 我是否应该移动到名称值对模型以访问属性?这样一切都是通过字符串而不是枚举来完成的吗?
- 我可以使用类似的方法来调用方法吗?
感谢您的回答。我希望能够更改传递的对象类型而不重新编译客户端。我会用'DataContracts'失去这个功能吗? – 2012-07-26 19:22:52