BizTalk WCF-WebHTTP REST Client with Body and Header Sign with static port

BizTalk WCF-WebHTTP REST Client with Body and Header Sign with static port

我需要将 REST 客户端写入需要自定义 Headers 和 JSON body.

的服务(我们称之为 REST 服务)

header 中的两个必须根据 header 中的其他值(也是动态的)和整个 JSON body 计算签名。

我还托管了一个将用于为我的客户提供服务的 Web 服务。在我的服务的 body 中,有一些值需要传递给 REST SERVICE 的 header。

我在编排的消息分配中进行了动态 WCF-WebHTTP 端口和整个 header 计算。它有效,但我想创建静态端口。 如何实现 body 和 header 检查 - 如何计算请求 body 的签名并将结果传递给具有静态 WCF-WebHTTP 端口的同一请求的 header?

我终于能够通过我的自定义行为完成此操作。

技巧是解码 body 的二进制形式,结果是 base64 编码

这里是我如何操作 body:

的示例代码
private Message TransformMessage2(Message oldMessage) { 

Message newMessage = null; 

MessageBuffer msgbuf = oldMessage.CreateBufferedCopy(int.MaxValue);

Message tmpMessage = msgbuf.CreateMessage();

XmlDictionaryReader xdr = tmpMessage.GetReaderAtBodyContents

XmlDocument xdoc = new XmlDocument(); 

xdoc.Load(xdr); xdr.Close(); 

byte[] bodyByte = Convert.FromBase64String(xdoc.InnerXml.ToString().Replace("<Binary>", "").Replace("</Binary>", ""));

String bodyString = Encoding.UTF8.GetString(bodyByte, 0, bodyByte.Length); 

bodyString = bodyString.Replace("1234321", "9999999"); 

bodyByte = Encoding.UTF8.GetBytes(bodyString);

bodyString = "<Binary>" + Convert.ToBase64String(bodyByte) + "</Binary>"; 

xdoc = new XmlDocument(); 

xdoc.LoadXml(bodyString); 

MemoryStream ms = new MemoryStream(); 

XmlWriter xw = XmlWriter.Create(ms);

xdoc.Save(xw); xw.Flush(); xw.Close();  ms.Position = 0; 

XmlReader xr = XmlReader.Create(ms);

newMessage = Message.CreateMessage(oldMessage.Version, null, xr);   newMessage.Headers.CopyHeadersFrom(oldMessage); 

newMessage.Properties.CopyProperties(oldMessage.Properties); 

return newMessage;  }