WCF 服务不接受枚举的新成员



我有一个wcf服务,看起来像这样:

[DataContract]
enum MyEnum
{
    [EnumMember]Member1,
    [EnumMember]Member2,        
    [EnumMember]Member3
}

[ServiceContract]
interface IMyService
{
    [OperationContract]
    string SolveBotguard(
        SolutionType myEnum);
}

服务工作得很好,并且我已经创建了一个带有它公开的mex端点的工作客户端。

现在我给enum添加了一个新成员:

[DataContract]
enum MyEnum
{
    [EnumMember]Member1,
    [EnumMember]Member2,        
    [EnumMember]Member4,  
    [EnumMember]Member3
}

再次通过MEX端点更新客户机。但是现在,当我试图用新的enum成员作为参数调用服务时,我得到了以下错误:

The formatter threw an exception while trying to deserialize the message: There 
was an error while trying to deserialize parameter http://tempuri.org/:myEnum. 
The InnerException message was 'Invalid enum value 'Member4' cannot be 
deserialized into type 'MyEnum'. Ensure that the necessary enum values are  
present and are marked with EnumMemberAttribute attribute if the type has
DataContractAttribute attribute.'.  Please see InnerException for more details.

我试过删除客户端和服务文件,并从源代码重新构建它们,但没有效果。

如何消除这个异常?

回答这个问题可能太晚了,但请尝试重新构建您的客户端(选择菜单选项)应用程序。

这个答案迟了好几年,但它可能会帮助其他人解决同样的问题。在我的例子中,问题是我根本没有最新版本的代码。获取最新版本,重新构建并重试。

这里是一些背景,我是如何找到我的问题的解决方案:显然,我有最新版本的服务端代码,但有旧的UI代码。服务调用起源于UI,所以我尝试调试我们应用程序的UI部分。当我尝试调试相关的视图模型时,Visual Studio告诉我,由于源代码不匹配,断点将永远不会被击中。在那一点上,这很容易。我从头开始,删除所有文件,从TFS获得最新版本,重新构建,问题解决了。

最新更新