【问题标题】:Beginner WCF Client/Server Loosely Coupled Design初学者 WCF 客户端/服务器松耦合设计
【发布时间】:2012-07-25 17:13:17
【问题描述】:

我有一个与单个客户端通信的 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 是要走的路吗?如果是,我该如何实现它们? (我以前从未使用过它们)
  • 我应该转移到名称值对模型来访问属性吗?这样一切都是通过字符串而不是枚举来完成的?
  • 我可以使用类似的方法来调用方法吗?

【问题讨论】:

    标签: c# wcf client-server


    【解决方案1】:

    AFAIK 不是一个好方法。你没有使用弱类型对象,这段代码很容易出现很多异常。您还必须使用反射,如果处理不当会损害性能。您应该在这里使用 DataContract。

    在 MSDN 上阅读有关 DataContract 的信息。可能值得阅读 WCF 书籍的初始章节或一些初学者教程。

    【讨论】:

    • 感谢您的回答。我希望能够在不重新编译客户端的情况下更改传递的对象类型。 DataContracts 会失去这个功能吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 2012-12-18
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多