【问题标题】:WCF : Making methods in DataContract object accessible to web service clientsWCF:使 Web 服务客户端可以访问 DataContract 对象中的方法
【发布时间】:2013-08-23 07:50:38
【问题描述】:

以下类的对象需要作为参数传递给 WCF Web 服务:

    public class Context
    {
        public static readonly string AUTH_CODE = "AUTH_CODE";

        public static readonly string REQUEST_TAG = "REQUEST_TAG";

        private readonly IDictionary<string, string> _context = new Dictionary<string, string>();

        public void AddProperty(string key, string value)
        {
            _context.Add(key, value);
        }

        public string GetProperty(string name)
        {
            return _context[name];
        }
    }

我用 [DataContract] 和 AUTH_CODE、REQUEST_TAG 和 _context 字段用 [DataMember] 标记了类。类本身与服务器端的 Web 服务一起定义。

当我尝试实例化此类的对象以便在从客户端调用 Web 服务时将其作为参数传递时,我观察到以下情况:

  1. AUTH_CODE 和 REQUEST_TAG 不可见。
  2. _context 是可见的,虽然它是私有成员
  3. AddProperty 和 GetProperty 方法不可见

你能解释一下上述行为吗?

另外,在调用 Web 服务之前,我需要访问 AddProperty 方法来填充对象。我如何做到这一点?

注意:这是我第一次使用 WCF。如果我偏离了实现此类行为的任何标准做法,请告知。

【问题讨论】:

    标签: c# wcf


    【解决方案1】:
    1. 如果应用于静态成员,则忽略 DataMemberAttribute 属性。
    2. 成员可访问性级别(内部、私有、受保护或公共)不会以任何方式影响数据合同。
    3. 数据协定仅支持状态,不支持行为。因此,您的方法不会影响您的数据合同。

    数据联系人的行为在以下 MSDN 链接中描述:http://msdn.microsoft.com/en-us/library/ms733127.aspx

    【讨论】:

    • 谢谢。我需要在客户端实例化一个对象并使用 AddProperty 方法来填充它。我该怎么办?
    • @Aadith 只需将 AddProperty 方法添加到您的客户端合同类。或者更好的是,您可以从客户端合同类创建派生类,并将此方法添加到您的派生类中。这样你就不需要每次都在你的合约中创建方法,你更新元数据。但总的来说,在合同中保留行为是一个坏主意。合同的目的是保留数据,而不是行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多