Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF:在双方执行平等的数据合同_C#_Wcf_Enums_Service_Datacontract - Fatal编程技术网

C# WCF:在双方执行平等的数据合同

C# WCF:在双方执行平等的数据合同,c#,wcf,enums,service,datacontract,C#,Wcf,Enums,Service,Datacontract,我想知道是否有可能让WCF确保连接两侧的DataContract完全相同(如果不相同,则在尝试连接时抛出异常) 例如,想象一下这项服务: [DataContract] enum State { [EnumMember] Red, [EnumMember] Yellow, [EnumMember] Green } [ServiceContract] interface MyService { [OperationContract]

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

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

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

[ServiceContract]
interface MyService
{
    [OperationContract]
    void SetState(State newState);
}
现在假设服务已更新,现在支持一个新状态“橙色”。客户端仍然拥有如上所示的DataContract

现在我希望客户机对服务的每次调用都失败,因为客户机和服务使用的不是同一个DataContract。这可能吗


提前感谢您的帮助

好吧,您不可能真正做到这一点,但您可以使用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命名空间不匹配)

也许这是一种方式


马克

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