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 エンドポイントを介してクライアントを更新しました。しかし今、新しい列挙型メンバーを param としてサービスを呼び出そうとすると、次のエラーが発生します。

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

この回答は何年も遅れていますが、同じ問題を抱えている他の人に役立つかもしれません. 私の場合、問題は単に最新バージョンのコードを持っていなかったことです。最新バージョンを入手して再構築し、再試行してください。

問題の解決策をどのように見つけたかについての背景を次に示します。明らかに、サービス側のコードは最新バージョンでしたが、UI コードは古いものでした。サービス コールは UI から発生するため、アプリの UI 部分をデバッグしてみました。関連するビューモデルをデバッグしようとすると、Visual Studio から、ソース コードが一致しないため、ブレークポイントにヒットすることはないと言われました。その時点で、それは簡単でした。私はゼロから始め、すべてのファイルを削除し、TFS から最新バージョンを取得し、再構築を行い、問題は解決しました。

于 2016-01-26T20:01:53.927 に答える
-1

これに答えるには遅すぎるかもしれませんが、クライアント (メニュー オプションを選択) アプリケーションを再構築してみてください。

于 2013-12-11T12:01:06.340 に答える