BizTalk 2016 WCF-WebHttp缓存标题

时间:2019-09-17 08:22:46

标签: biztalk biztalk-2016

我已经创建了一个仅带有自定义管道组件的发送管道,该组件创建了一个mime消息以将其发布到需要多部分/表单数据的Rest API。它可以工作,但是每次第二次调用都失败。它在成功和失败之间交替。如果失败,我写到标头的边界似乎会被WCF-WebHttp适配器使用以前成功的消息的边界所覆盖。

  • 我确保将正确的边界写到标题上。
  • 我在管道组件中使用的所有流都已添加到管道资源管理器中。
  • 如果在第一条成功消息之后重新启动主机实例,则下一条消息将成功。
  • 在处理每条消息之间等待10分钟,观察到的行为没有变化。
  • 如果在预计会发生故障的情况下发送其他文件,则标题内容长度仍与前一个文件相同。这表明所使用的标头与先前的调用完全相同。
  • 标准的BizTalk MIME组件不会将边界写入标头,因此不提供任何线索。

成功

POST http://somehost/Record HTTP/1.1
Content-Type: multipart/form-data; boundary="9ccdeb0a-c407-490c-9cce-c5e3be639785"
Host: somehost
Content-Length: 11989
Expect: 100-continue
Accept-Encoding: gzip, deflate

--9ccdeb0a-c407-490c-9cce-c5e3be639785
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=uri

6442
--9ccdeb0a-c407-490c-9cce-c5e3be639785

失败:标头中的边界与有效负载中的边界不同

POST http://somehost/Record HTTP/1.1
Content-Type: multipart/form-data; boundary="9ccdeb0a-c407-490c-9cce-c5e3be639785"
Host: somehost
Content-Length: 11989
Expect: 100-continue
Accept-Encoding: gzip, deflate

--3fe3e969-8a41-451c-aae7-8458aee0c9f4
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=uri

6442
--3fe3e969-8a41-451c-aae7-8458aee0c9f4
Content-Disposition: form-data; name=Files; filename=testdoc.docx; filename*=utf-8''testdoc.docx

如果我可以使标题使用正确的边界,那么我的问题将得到解决。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

令我惊讶的是,您实际上通过这种方法取得了一些成功。问题是,标头不是正式的消息属性,而是端口属性。端口将缓存其设置。您必须使其成为一个动态发送端口,它才能正常工作。另一种方法是通过在自定义行为中设置标题,但我认为这不适合您的情况。