我最近对WCF WebService进行了一些更改,这违反了我的Web服务合同。我希望有一种方法可以生成向后兼容的相同/类似的WSDL(目前,无论我在客户端代码中设置什么,UpdateTypes总是= 0 / None)
下面的代码仅显示与问题相关的部分。
这是我的代码最初的样子:
public enum UpdateTypes
{
None = 0,
Insert = 1,
Update = 2,
Delete = 3
}
[DataContract()]
public class BaseEntity
{
[DataMember()]
public UpdateTypes UpdateType {get; set;}
}
public class User : BaseEntity
{
//...other properties and methods
}
生成了一个看起来像这样的WSDL:
<xs:complexType name="BaseEntity">
<xs:sequence>
<xs:element minOccurs="0" name="UpdateType" type="tns:UpdateTypes" />
</xs:sequence>
</xs:complexType>
<xs:element name="BaseEntity" nillable="true" type="tns:BaseEntity" />
<xs:simpleType name="UpdateTypes">
<xs:restriction base="xs:string">
<xs:enumeration value="None" />
<xs:enumeration value="Insert" />
<xs:enumeration value="Update" />
<xs:enumeration value="Delete" />
</xs:restriction>
</xs:simpleType>
<xs:element name="UpdateTypes" nillable="true" type="tns:UpdateTypes" />
这就是我改变了破坏我的Web服务合同的类代码:
public class User : IUpdateable
{
[DataMember()]
public UpdateTypes UpdateType { get; set; }
//...other properties and methods
}
因为它将WSDL更改为这样(注意现在缺少BaseEntity部分):
<xs:simpleType name="UpdateTypes">
<xs:restriction base="xs:string">
<xs:enumeration value="None" />
<xs:enumeration value="Insert" />
<xs:enumeration value="Update" />
<xs:enumeration value="Delete" />
</xs:restriction>
</xs:simpleType>
<xs:element name="UpdateTypes" nillable="true" type="tns:UpdateTypes" />
这会导致UpdateType在到达新更新的WCF服务端点应用程序时始终为0。
答案 0 :(得分:0)
您可以指示WCF使用与原始合同匹配的自定义WSDL,尽管它不是微不足道的。这是一个向WSDL添加文档的微软示例: http://msdn.microsoft.com/en-us/library/aa717040(v=vs.110).aspx