0

我想知道是否可以让 WCF 确保连接两侧的 DataContracts 完全相同(如果不是,则在尝试连接时抛出异常)。

例如,想象一下这个服务:

[DataContract]
enum State
{
    [EnumMember]
    Red,
    [EnumMember]
    Yellow,
    [EnumMember]
    Green
}

[ServiceContract]
interface MyService
{
    [OperationContract]
    void SetState(State newState);
}

现在想象一下服务已经更新,现在支持一个新的状态,“橙色”。客户端仍然具有如上所示的 DataContract。

现在我希望客户端对服务的每次调用都失败,因为客户端和服务没有使用相同的 DataContract。这可能吗?

提前感谢您的帮助!

4

1 回答 1

2

好吧,你真的不能做那么多——但你可以用 XML 命名空间对你的数据合约进行版本化——像这样:

[DataContract(Namespace="http://data.yourcompany.com/DataSchema/2009/11")]
enum State
{
    [EnumMember]
    Red,
    [EnumMember]
    Yellow,
    [EnumMember]
    Green
}

您的客户端现在将使用此数据协定 - 与 XML 命名空间。

如果您在下个月更改服务器上的数据合同,您可以将 XML 命名空间更改为:

[DataContract(Namespace="http://data.yourcompany.com/DataSchema/2009/12")]
enum State
{
 ....
}

如果您停用所有使用“/2009/11”数据协定的服务端点,并且只有具有新数据协定的新端点,客户端将无法再成功调用您的服务方法(因为两者的 XML 命名空间DataContracts 不匹配)。

也许这将是一条路要走?

马克

于 2009-11-10T11:57:21.883 回答