是否可以包含WCF服务元数据中服务操作未使用的类?

2 c# wcf web-services

每默认情况下,所有的数据契约实体,参与实现服务操作(及其已知类型的,都包括在服务元数据.我试图找到答案,如果有可能在包括在元数据中的其他类或数据的合同,原因这是,我有一些枚举,可以用来填补参与服务经营单位的字符串字段,或者当服务返回的错误信息,他们有我想"翻译"或给予的含义给它的标识符没有从外部服务引用某些程序集.

这样的事情是否可能,或者有其他人提示如何处理这个问题?

服务声明的说明性示例如下:

[DataContract(Namespace = "http://schemas.example.com/Common/ExampleServices/V20090903")]
public enum SearchTaskField
{

    [EnumMember]
    Id,
    [EnumMember]
    Date,
    ...
}

[DataContract(Namespace="http://schemas.example.com/Common/ExampleServices/V20090903")]
public class SearchCondition 
{

    [DataMember(Name = "ColumnName")]
    public virtual string ColumnName
    {
        get; set; 
    }

    [DataMember(Name = "ColumnValue")]
    public virtual object ColumnValue
    {
        get; set;
    }

    [DataMember(Name = "ObjectType")]
    public virtual string ObjectType
    {
        get; set; 
    }
}

[ServiceContract(Namespace="http://schemas.examle.com/Common/ExamleServices/V20090903")]
public interface IExampleServiceServiceContract
{

    [OperationContract(Name = "Search")]
    SearchOut Search(SearchIn messageIn);
}

[MessageContract]
public class SearchIn
{

    [MessageBodyMember(Name = "Conditions", Order = 1)]
    public virtual IList<Condition> Conditions
    {
        get; set;
    }
}
Run Code Online (Sandbox Code Playgroud)

Jer*_*ard 5

您可以使用ServiceKnownType属性修饰您的服务.这将导致指定的类型包含在元数据中,即使它没有被服务契约直接使用(不涉及其他暴露类型之一的对象图).

正如您已经完成的那样,您必须将枚举标记为[DataContract]并将每个枚举值标记为[EnumMember].将以下行添加到ServiceContract接口将在客户端上公开枚举.

请记住,您需要更新服务引用以查看生成的代码中的任何更改.

[ServiceKnownType(typeof(SearchTaskField))]
Run Code Online (Sandbox Code Playgroud)