WCF:在两端实施相等的DataContracts

时间:2009-11-10 10:17:23

标签: c# wcf enums service datacontract

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

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

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

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

现在假设服务已更新,现在支持新状态“Orange”。客户端仍然具有如上所示的DataContract。

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

提前感谢您的帮助!

1 个答案:

答案 0 :(得分: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不匹配)。

也许这是一种方法?

马克