【问题标题】:How to consume an MIME response attachment in C#?如何在 C# 中使用 MIME 响应附件?
【发布时间】:2014-03-03 17:06:23
【问题描述】:

我正在使用一个名为 JasperServer 的 java 编写的 Web 服务。我想从 Web 服务获取文件并将其保存在本地。


Web 服务提供了一个 get() 方法;它请求一个 XML 字符串,并返回一个字符串,并将目标文件作为 MIME 附件:

public string get(string requestXmlString)

现在我尝试使用字符串来接收响应:

String res2 = webServiceClient.get(xmlInput);

它给了我一个例外:

客户端发现响应内容类型为'multipart/related;类型=“文本/xml”;开始="";边界="----=_Part_2_1089980294.1393857885100"',但应为'text/xml'。

请求失败并显示错误消息:

------=_Part_2_1089980294.1393857885100
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-Id: <7817FB68F69B037F5A5DEDE2AC105A65>

所以我的问题是如何在 C# .Net 中使用带有 MIME 附件的字符串响应。以及如何将其保存到我的本地?

【问题讨论】:

  • 感谢 nandhp 编辑我的帖子。这是我在Stack上的第一篇文章,我的格式不好。

标签: c# xml web-services soap jasperserver


【解决方案1】:

您需要一个组件来解析 RFC 822/2045 和扩展所描述的 MIME 格式。 .NET 框架不包含为此的内置类。

我对 Mime4Net 组件有很好的经验(它基于 Apache mime4j 的端口):

Stream mimeMsgStream;
var m = new MimeMessage(mimeMsgStream);

MimeMessage 为 MIME 结构提供 DOM,并且可以轻松提取附件内容。另请注意,Mime4Net 仅供非商业用途免费使用。

【讨论】:

  • 谢谢维塔利!但是仅用于非商业用途的免费对我不起作用。就像你说的那样,.Net 没有内置类,我发现 Jasperserver 不能很好地支持 SOAP。所以我用REST代替了SOAP,现在问题解决了。
【解决方案2】:

我在使用 Java WS 时遇到了同样的问题。 在 WCF3 配置中,我只将 messageEncoding 属性添加到绑定定义并将其设置为“Mtom”。 像这样的:

...
<system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="e3" messageEncoding="Mtom">

【讨论】:

    猜你喜欢
    • 2010-10-26
    • 2019-04-24
    • 2012-05-12
    • 2012-08-01
    • 2013-07-22
    • 2012-11-02
    • 2015-08-30
    • 1970-01-01
    • 2013-07-15
    相关资源
    最近更新 更多