每默认情况下,所有的数据契约实体,参与实现服务操作(及其已知类型的,都包括在服务元数据.我试图找到答案,如果有可能在包括在元数据中的其他类或数据的合同,原因这是,我有一些枚举,可以用来填补参与服务经营单位的字符串字段,或者当服务返回的错误信息,他们有我想"翻译"或给予的含义给它的标识符没有从外部服务引用某些程序集.
这样的事情是否可能,或者有其他人提示如何处理这个问题?
服务声明的说明性示例如下:
[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)
您可以使用ServiceKnownType属性修饰您的服务.这将导致指定的类型包含在元数据中,即使它没有被服务契约直接使用(不涉及其他暴露类型之一的对象图).
正如您已经完成的那样,您必须将枚举标记为[DataContract]并将每个枚举值标记为[EnumMember].将以下行添加到ServiceContract接口将在客户端上公开枚举.
请记住,您需要更新服务引用以查看生成的代码中的任何更改.
[ServiceKnownType(typeof(SearchTaskField))]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2476 次 |
最近记录: |