给定运营合同,例如:
[OperationContract]
void Operation(string param1, string param2, int param3);
Run Code Online (Sandbox Code Playgroud)
这可以重新设计为:
[MessageContract]
public class OperationRequest
{
[MessageBodyMember]
public string Param1 { get; set; }
[MessageBodyMember]
public string Param2 { get; set; }
[MessageBodyMember]
public int Param3 { get; set; }
}
[MessageContract]
public class OperationResponse
{
}
[OperationContract]
OperationResponse Operation(OperationRequest request);
Run Code Online (Sandbox Code Playgroud)
我喜欢MessageContract的一件事是我对SOAP消息的格式有了更明确的控制.
同样,我可以编写几乎相同的代码,但使用DataContract:
[DataContract]
public class OperationRequest
{
[DataMember]
public string Param1 { get; set; }
[DataMember]
public string Param2 { get; set; }
[DataMember]
public int Param3 { get; set; …Run Code Online (Sandbox Code Playgroud) 鉴于XSD如下:
<xs:schema elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:std="http://..." targetNamespace="...">
<xs:element name="SomeRootNode" type="std:SomeRootNodeType" />
...
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
它定义了一些允许来自不同命名空间的子进程的元素.
我想用自己的模式扩展这个模式,并在基础文档中插入子元素和特定元素的属性.例如,myElementX或myAttributeY必须具有父节点std:SomeRootNode.然后,组合文档应该能够允许任何第三方继续以基本模式已经允许的任何方式扩展文档,但是对于来自我的命名空间的元素和属性,我想验证所有元素和属性是否具有正确的父节点并仅出现在基本文档中允许的位置.
怎么能实现这一目标?
我希望有一个干净的解决方案,而不是重新定义我扩展的基础架构.如果发布新版本的基础架构,我希望能够轻松适应.每次发布新版本的基础文档时,我都不想用新的重新定义来改变我的(除非它对我的设计有重大改变).