WCF - 将属性标记为忽略的任何方法?

时间:2011-05-31 17:24:28

标签: c# wcf attributes ignore service-reference

基本上如果我有以下内容:

[DataContract]
public class Foo
{
    [MyCustomAttribute(...)]
    [DataMember(IsRequired = true)]
    public int bar { get; set; }
}

如何在用户使用“添加服务引用...”生成类时忽略MyCustomAttribute

基本上,我不希望在客户端生成的代码的属性上设置该属性。请记住,我仍然希望房产本身出现,但基本上客户应该看起来像这样......

[DataContract]
public class Foo
{
    [DataMember(IsRequired = true)]
    public int bar { get; set; }
}

3 个答案:

答案 0 :(得分:2)

无法将您的属性包含在客户端生成的代码中

参考:http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/ce241118-bc79-4788-a739-c445a52fcd1d

答案 1 :(得分:1)

[DataMember]是序列化引擎的一部分,因此需要。您在代理中看到它的原因是代理使用与服务相同的DataContractSerializer。当IsRequired设置为true时,代理可以确定是否可以发送客户端(如果设置了所需的值)。

从WSDL可以确定是否需要属性,因此DataMemberAttribute是基于WSDL文件设置的;不是服务的源代码。默认情况下,代理完全根据网络上提供的服务描述生成。正如其他答案所提到的那样,你肯定将自己的自定义属性复制到代理中。

答案 2 :(得分:-1)

一种可能性是创建一个接口并将Attribute放在接口方法上。

您可以查询接口而不是具体类,但WCF只能看到该类的具体实现。

你可以说:

 [DataContract] 
 public class Foo : IFoo
 {
     [DataMember(IsRequired = true)]
     public int bar { get; set; } 
 }

 public interface IFoo 
 {
     [MyCustomAttribute(...)]
     int bar { get; set; } 
 }