Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
When an incoming message is sent in unrecognized ANSI encoding, we usually have to convert it into UTF8 or UTF16 for BizTalk to properly process it. This can be done within a simple custom pipeline component.
Below is the sample code:
publicIBaseMessage Execute(IPipelineContext pContext, IBaseMessage pInMsg)
{
//Validate parameters
if (pContext == null) thrownewArgumentNullException("pContext");
if (pInMsg == null) thrownewArgumentNullException("pInMsg");
this.pipelineContext = pContext;
this.baseMessage = pInMsg;
string partName;
for (int i = 0; i < baseMessage.PartCount; i++)
{
MemoryStream outStream = newMemoryStream();
partName =
null;
IBaseMessagePart part = baseMessage.GetPartByIndex(i, out partName);
Encoding ANSI = Encoding.GetEncoding("big5");
Encoding UTF8 = Encoding.UTF8;
StreamReader reader = newStreamReader(part.GetOriginalDataStream(), ANSI);
string partBody = reader.ReadToEnd();
byte[] ANSIBytes = ANSI.GetBytes(partBody);
byte[] UTF8Bytes = Encoding.Convert(ANSI, UTF8, ANSIBytes);
char[] UTF8Chars = newchar[UTF8.GetCharCount(UTF8Bytes, 0, UTF8Bytes.Length)];
UTF8.GetChars(UTF8Bytes, 0, UTF8Bytes.Length, UTF8Chars, 0);
partBody = new string(UTF8Chars);
StreamWriter writer = newStreamWriter(outStream, newUTF8Encoding());
writer.Write(partBody);
writer.Flush();
outStream.Seek(0,
SeekOrigin.Begin);
part.Data = outStream;
}
return baseMessage;
}
Best regards,
WenJun Zhang