MSMQからメッセージを受信して処理するWindowsサービスを作成しています。リスナーにはさまざまなエラー処理手順がありますが、それ以外はすべて失敗しても、メッセージの本文をテキストファイルに保存して見たいと思います。しかし、この条件が当たったときに私のメッセージの内容を抽出することはできません。次のコードは問題のセクションを単純に表したもので、テストしているメッセージが空でないことがわかっていても空のテキストファイルが生成されます。しかし、XMLを逆直列化しようとする最初の試みをコメントアウトすると、フェールセーフが機能し、メッセージ本文のテキストファイルが生成されます。だから私は、問題はデシリアライゼーションの試みが元のストリームをどのように残すかと関係していると思いますか?メッセージに、デシリアライズできる有効なXMLが含まれている場合、サービスはすべて正常に動作し、フェイルセーフは決して動作しません。MSMQメッセージボックスをテキストファイルに保存します。
を窓バイナリメッセージの場合:使用しているフォーマッタによって
MyClass myClass = null;
try
{
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
// Comment the following out and the fail safe works
// Let this run and fail and the text file below is always empty
myClass = (MyClass)serializer.Deserialize(m.BodyStream);
}
catch (Exception ex)
{
}
if (myClass == null)
{
string filePath = @"D:\path\file.txt";
m.Formatter = new ActiveXMessageFormatter();
StreamReader reader = new StreamReader(m.BodyStream);
File.WriteAllText(filePath, reader.ReadToEnd());
}
私はSystem.Net.WebUtility.HtmlDecodeとSystem.Net.WebUtility.HtmlEncodeを使用する必要があると思います。 Htmlは特定の特殊文字以外はありません:https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references – jdweng
あなたの返信ありがとうございますが、これはウェブページではありませんので、HTMLはここでは関係ありませんか? XMLはHTMLのようなマークアップ言語ですが、特殊文字は本当にテキストファイルに書き込まれるのをやめますか? – user470249
あなたのサービスはhtmlではないと確信していますか? 「messageBody」は通常、htmlの電子メールメッセージです。 – jdweng