Microsoft FIX 提供了一个可能的修复:WCF-WebHTTP 双向发送响应以空消息响应并导致 JSON 解码器在 BizTalk Server 中失败,但这是 2016 年的 CU2,所以看起来他们没有解决除非您没有填充 AddMessageBodyForEmptyMessage 属性,否则问题 100%。
Mark 的解决方案更多地与 JSON 编码器创建的 JSON 有效负载中的某些元素有关,这些元素具有 null 值,这本身就是针对 JSON 编码器中将空字符串更改为 null 的错误的解决方法。
如果您不想使用 BRE 管道组件(我知道它正在处理中,希望很快可用于 BizTalk 2016),那么您可以在下面滚动您自己的,其中 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