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

时间:2013-05-25 17:51:41

标签: c# wcf

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

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


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

该服务运行良好,我创建了一个工作客户端,其中包含一个公开的mex端点。

现在我在枚举中添加了一个新成员:

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

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

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.

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

如何摆脱此异常?

2 个答案:

答案 0 :(得分:0)

回答此问题可能为时已晚,但请尝试重建您的客户端(选择菜单选项)应用程序。

答案 1 :(得分:0)

这个答案已经晚了很多年,但它可能会帮助其他人解决同样的问题。就我而言,问题是我根本没有最新版本的代码。获取最新版本,重建并重试。

以下是我如何找到问题解决方案的背景知识: 显然,我有最新版本的服务端代码,但有旧的UI代码。服务调用源自UI,因此我尝试调试应用程序的UI部分。当我尝试调试相关的viewmodel时,Visual Studio告诉我,断点永远不会被命中,因为源代码不匹配。那时很容易。我从头开始,删除了所有文件,从TFS获得了最新版本,进行了重建,问题解决了。