我想知道是否可以让WCF确保连接两端的DataContracts完全相同(如果不是,则在尝试连接时抛出异常)。
例如,想象一下这项服务:
[DataContract]
enum State
{
[EnumMember]
Red,
[EnumMember]
Yellow,
[EnumMember]
Green
}
[ServiceContract]
interface MyService
{
[OperationContract]
void SetState(State newState);
}
现在假设服务已更新,现在支持新状态“Orange”。客户端仍然具有如上所示的DataContract。
现在我希望从客户端到服务的每次调用都失败,因为客户端和服务没有使用相同的DataContract。这可能吗?
提前感谢您的帮助!
答案 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不匹配)。
也许这是一种方法?
马克