3

我有一个看起来像这样的 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.

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

我该如何摆脱这个异常?

4

2 回答 2

-1

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

于 2013-12-11T12:01:06.340 回答
-1

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

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

于 2016-01-26T20:01:53.927 回答