我有一個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