【问题标题】:WCF: Enforce equal DataContracts on both sidesWCF:在双方强制执行相等的 DataContracts
【发布时间】:2009-11-10 10:17:23
【问题描述】:

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

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

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

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

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

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

提前感谢您的帮助!

【问题讨论】:

  • 恐怕这是不可能的。
  • 可惜了。谢谢你的回答。看来我必须在这种情况下找到一些丑陋的解决方法以确保兼容性。

标签: c# wcf enums service datacontract


【解决方案1】:

好吧,你真的不能做那么多 - 但你可以用 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 命名空间两个 DataContract 中的一个不匹配)。

也许这是一条路?

马克

【讨论】:

    猜你喜欢
    • 2011-09-29
    • 1970-01-01
    • 2015-12-26
    • 2012-06-14
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    相关资源
    最近更新 更多