在 WCF 中命名通用 DataContract

Posted

技术标签:

【中文标题】在 WCF 中命名通用 DataContract【英文标题】:Naming Generic DataContracts in WCF 【发布时间】:2010-10-05 07:40:03 【问题描述】:

我使用泛型类作为响应数据协定。一切都很好,这大大简化了我的 WCF 服务的设计。

每个请求都有一个标准响应对象,其签名如下:

状态(枚举) 消息(字符串) 结果 (T)

下面是响应类:

[DataContract]
    public class Response<T>
    
        public Response() 

        public Response(T result)
        
            this.result = result;
            if (result != null)
            
                this.status = Status.StatusEnum.Success;
            
            else
            
                this.status = Status.StatusEnum.Warning;
            
        

        public Response(T result, Status.StatusEnum status)
        
            this.status = status;
            this.message = message;
        

        public Response(T result, Status.StatusEnum status, string message)
        
            this.status = status;
            this.message = message;
            this.result = result;
        

        [DataMember]
        public Status.StatusEnum status  get; set; 

        [DataMember]
        public string message  get; set; 

        [DataMember]
        public T result  get; set; 
    

这非常有效。我唯一的问题是 WCF 客户端为这个对象“ResponseOfAccountnT9LOUZL”提供了一个非常糟糕的名称

有没有办法解决这个问题?

我应该将这个类用作继承的抽象类吗? 我宁愿没有多个类使我的代码混乱。

【问题讨论】:

这就是***对我的价值……我知道我以前问过这个问题。甚至回答了!就是这样 - 谢谢 您的主要服务方法的返回类型是什么。即你可以你应该如何使用它。 PLZ 【参考方案1】:

好的,找到了Answer

您可以使用以下语法指定序列化版本:

[DataContract(Name = "MyClassOf01")]

类 MyClass

所以,如果我有一个名为 Response 的类,它采用 Generic T 参数 我会用

[DataContract(Name = "ResponseOfType0")]

类响应

【讨论】:

【参考方案2】:
[DataContract(Name = "ReturnObjectOfType0")]
    public class ReturnObject<T>
    ....

//Iservice
[OperationContract]
        ReturnObject<AdresKisiBilgi> BeldeAdresKisiBilgiSorgula(string tcKimlikNo);


//Service
public ReturnObject<HbysBusiness.MernisGuvenService.AdresKisiBilgi> BeldeAdresKisiBilgiSorgula(string tcKimlikNo)
        
            return new MernisBiz().BeldeAdresKisiBilgiSorgula(tcKimlikNo);
        


client:
 public ReturnObjectOfAdresKisiBilgi BeldeAdresKisiBilgiSorgula(string tcKimlikNo)
        ....

谢谢你,哈利

【讨论】:

以上是关于在 WCF 中命名通用 DataContract的主要内容,如果未能解决你的问题,请参考以下文章

未找到 WCF 命名管道端点

WCF - Soap 标头在安全元素中引用命名空间两次

更改前缀命名空间 WCF 信封请求

如何在 WCF 中自动重新连接命名管道绑定

WCF 命名管道在 WinApp 中超时,但在 ConsoleApp 中没有?

创建命名管道 (WCF) 所需的最低操作系统权限