我已经创建了一个仅带有自定义管道组件的发送管道,该组件创建了一个mime消息以将其发布到需要多部分/表单数据的Rest API。它可以工作,但是每次第二次调用都失败。它在成功和失败之间交替。如果失败,我写到标头的边界似乎会被WCF-WebHttp适配器使用以前成功的消息的边界所覆盖。
成功
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
如果我可以使标题使用正确的边界,那么我的问题将得到解决。有什么建议吗?
答案 0 :(得分:2)
令我惊讶的是,您实际上通过这种方法取得了一些成功。问题是,标头不是正式的消息属性,而是端口属性。端口将缓存其设置。您必须使其成为一个动态发送端口,它才能正常工作。另一种方法是通过在自定义行为中设置标题,但我认为这不适合您的情况。