Существует возможное исправление от Microsoft ИСПРАВЛЕНИЕ: Ответ двусторонней отправки WCF-WebHTTP отвечает пустым сообщением и приводит к сбою декодера JSON на BizTalk Server , но это было в CU2 на 2016 год, поэтомупохоже, что они не решили проблему на 100%, если вы не заполнили свойство AddMessageBodyForEmptyMessage.
Решение Марка больше связано с некоторыми элементами в полезной нагрузке JSON, созданными JSON Encoder, имеющими нулевое значение, что само по себе является обходным решением для ошибки в JSON Encoder, которая превращает пустую строку в ноль.
Если вы не хотите использовать компонент конвейера BRE (который, мы надеемся, будет доступен для BizTalk2016, очень скоро, когда я знаю, что над ним ведутся работы), вы можете свернуть свой собственный, например, ниже, где InsertInEmpty - это параметр в компоненте конвейера, который вы можете указать, какое сообщение возвращать, если вы получите пустое тело.
#region IComponent members
/// <summary>
/// Implements IComponent.Execute method.
/// </summary>
/// <param name="pc">Pipeline context</param>
/// <param name="inmsg">Input message</param>
/// <returns>Original input message</returns>
/// <remarks>
/// IComponent.Execute method is used to initiate
/// the processing of the message in this pipeline component.
/// </remarks>
public Microsoft.BizTalk.Message.Interop.IBaseMessage Execute(Microsoft.BizTalk.Component.Interop.IPipelineContext pc, Microsoft.BizTalk.Message.Interop.IBaseMessage inmsg)
{
string dataOut = "";
StreamReader sr = new StreamReader(inmsg.BodyPart.Data);
if (InsertInEmpty != "" & inmsg.BodyPart.Data.Length == 0)
{
dataOut = InsertInEmpty;
}
else
{
dataOut = dataOut + sr.ReadToEnd();
}
MemoryStream ms = new System.IO.MemoryStream(System.Text.Encoding.ASCII.GetBytes(dataOut));
inmsg.BodyPart.Data = ms;
inmsg.BodyPart.Data.Position = 0;
return inmsg;
}
#endregion