private static string ReadDefaultMessageBody(ref Message message)
{
const string XmlReaderName = "binary";
if (message.IsEmpty)
{
return string.Empty;
}
MessageBuffer buffer = message.CreateBufferedCopy(int.MaxValue);
try
{
// Copy the original message and use it for reading.
Message messageCopy = buffer.CreateMessage();
// Re-create original message
message = buffer.CreateMessage();
// Dump payload from original message
// It is in either plain text or in base64 encoded string
using (var reader = messageCopy.GetReaderAtBodyContents())
{
return string.Compare(reader.Name, XmlReaderName, StringComparison.OrdinalIgnoreCase) == 0
? Encoding.Default.GetString(Convert.FromBase64String(reader.ReadInnerXml()))
: reader.ReadOuterXml();
}
}
finally
{
buffer.Close();
}
}
Hivatkoztam néhány linkre a stackoverflow-ról: Ez az üzenet nem lehet támogatja a műveletet, mert át lett másolva
és
MessageInspector üzenet: Ez az üzenet nem támogatja a műveletet, mert átmásolták.
Az első linkről úgy tűnik, hogy az üzenetet nem lehet többször átmásolni. A második linkről pedig úgy tűnik, hogy az üzenet többször is lemásolható, ha újra létrehozzuk az üzenetet.
Tud valaki rámutatni arra a hibára, amit elkövetek? Mivel ezt a módszert többször hívják, és a következő hibaüzenetet kapom: "Ez az üzenet nem támogatja a műveletet, mert át lett másolva"
Kivétel: System.InvalidOperationException: Ez az üzenet nem támogatja a műveletet, mert át lett másolva.\r\n itt: System.ServiceModel.Channels.Message.CreateBufferedCopy(Int32 maxBufferSize)
BeforeSendReply
alkalmazásban az IDispatchMessageInspector számára? 28.06.2018