问题标签 [mtom]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4338 浏览

wcf - 从 Apache CXF 访问 WCF Web 服务(MTOM + WS-Security)

我已经为这个问题苦苦挣扎了很长一段时间,尽管环顾四周,但仍然无法解决它。

场景细节(代码、配置和其他东西贴在最后):

  1. WCF Web 服务 (.NET 4),公开两个端点:一个不安全,一个使用消息安全和用户名身份验证(使用成员资格基础结构)进行保护——无传输安全。
  2. 两个端点都使用 MTOM 编码;WSDL 引用的所有类都标有 MessageContract 属性,而成员则标有 MessageBodyMember 属性。
  3. WCF 绑定上的配置已将“建立安全上下文”和“协商服务凭据”设置为 false。
  4. 出于加密目的,使用自签名证书保护 WCF 服务。
  5. 尝试使用 Apache CXF 2.5.1 从 Java 客户端进行访问。我已将证书设置为可从类路径访问的 KeyStore。

结果:

  1. 从 .NET 客户端访问 Web 服务工作正常
  2. 无论有无 MTOM 编码,从 Apache CXF 访问不安全的端点都可以正常工作。
  3. 从 Apache CXF 访问安全端点(没有 MTOM)可以正常工作。CXF追踪表明加解密过程正常进行。
  4. 在 WCF 中激活 MTOM 后,问题就出现了。我们能够确定在 WCF 端,消息的接收、其处理和响应的生成/加密正常进行。
  5. 问题是在 CXF 中接收消息的过程中发生的。在我们看来,CXF 在尝试解密消息之前没有正确反序列化 MTOM 附件;因此,解密逻辑发现消息在响应中仍然有一个要解密的元素,但是找到了一个空元素要解密并且失败。我们尝试添加一个接收阶段拦截器来初始化附件,但无济于事(尝试在多部分响应中找到边界标记失败)。
  6. 使用 Fiddler,我们发现响应看起来格式正确,并带有附件

代码/配置/东西:

Web.Config(为清楚起见而缩短):

Java 客户端代码(为清楚起见省略了部分):

错误跟踪(仅限解密阶段):

如您所见,当 CxF 尝试解码引用附件的元素时,它发现其内容为空,然后失败。

任何帮助将不胜感激。

由于大小限制,无法发布 WSDL。如有必要,可应要求提供。

问候,

爱德华多·基罗斯-坎波斯

0 投票
1 回答
564 浏览

web-services - 在 RAD 7.5 中生成 JAX-WS Web 服务时出错

我正在尝试使用 RAD7.5 服务生成实用程序生成 Web 服务。

我在服务类上使用注释作为

并在 Web 服务方法上作为

我想将带有 WSDL 文件的 Web 服务生成到项目和 Web 服务部署描述符中

在项目复选框中选择WSDL 文件时,出现以下错误:

任何帮助都将不胜感激

0 投票
0 回答
3412 浏览

java - CXF Webservice MTOM 无法发送文件

我有一个网络服务,我想用它发送大文件。当文件小于 50 MB 时,它可以工作。有人知道可能出了什么问题吗?

数据处理程序对象看起来像这样

创建 Datahandler 对象的函数如下

客户端部分如下:

当我在客户端运行它时,出现此错误:

0 投票
1 回答
4690 浏览

c# - WCF 使用 MTOM 上传 50Mg 的文件

使用 WCF 上传 50MG 文件的最佳方式是什么?

我以为 MTOM 会自动处理这个问题。
我想我错了...

即使在 LocalHost 上运行也会发生异常
(我假设使用外部 IIS 会更糟糕)。

异常消息:

“接收对http://localhost:7064/DataSyncService.svc的 HTTP 响应时发生错误 。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于 HTTP 请求上下文被中止服务器(可能是由于服务关闭)。有关更多详细信息,请参阅服务器日志。”

服务器配置

客户端配置

提前致谢。

0 投票
1 回答
1991 浏览

cxf - 将 MTOM 与 Apache CXF 2.5.2 一起使用时架构验证失败

我正在使用 Apache CXF 2.5.2 创建 Web 服务。我创建了一个端点并使用以下方法启用了 mtom 和模式验证:

如果我关闭该mtom-enabled属性,则架构将正确验证。如果我关闭该schema-validation-enabled属性,则 mtom 可以正常工作。

我的架构如下所示:

我的 Base64Binary 类看起来有点像这样:

启用架构验证后,我收到以下错误:

关于如何解决此验证错误的任何想法?

谢谢你。

0 投票
1 回答
1865 浏览

cxf - 是否可以仅在 Apache CXF 2.5.2 中为入站或出站 xml 启用模式验证?

我已经使用 Apache CXF 2.5.2 创建了一个 Web 服务端点,但是我在模式验证和 MTOM 交互方面遇到了一些问题。如果我启用 MTOM 和模式验证,我必须直接使用 base64Binary 类型,但是我试图符合一个固定规范,其中 MTOM 字段也具有“contentType”属性。

是否可以仅对入站或出站消息启用架构验证?例如:

或者,是否有其他方法可以实现这一点,例如覆盖出站消息验证?

谢谢。

0 投票
2 回答
4098 浏览

axis2 - AXIS 客户端与 AXIS2 服务

我必须实现一个使用 AXIS2 1.4 方法的 AXIS 1.4 客户端。AXIS 1.4 客户端是通过创建存根来制作的。客户端发送一个请求并从带有一些附件 (MTOM) 的服务返回一个响应。当我通过 AXIS 1.4 端口类型对象调用方法(操作)时,出现错误:

org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.

我认为 MTOM 搞砸了 AXIS。那么问题来了:我是如何获得 AXIS2 1.4 (MTOM) Web 服务返回给我的附件的?TIA。

弗朗切斯科

PS:这里是代码。有 WSDL 生成的存根。问题是:当我调用端口的存根方法时出现异常。我收到的邮件中有附件。

我收到的消息有

里面的标签,它是MTOM(我猜它会导致异常)。希望这可以帮助。

0 投票
1 回答
665 浏览

wcf - WCF - 检查 MTOM 编码的消息 BeforeSendRequest

我正在与使用 Mtom 作为消息编码的第三方 WCF 服务集成。我创建了一个消息检查器行为,我可以通过调用来查看消息请求“字符串” request.ToString(),但是,该消息似乎从未被 mtom 编码,并且不包含任何 MIME 部分。我假设 Mtom 编码稍后发生在通道管道中。我的问题是,有没有办法查看实际的传出消息而不管编码如何,因为它将通过线路发送到 WCF 服务?

以下是我正在使用的消息检查器:

0 投票
1 回答
11113 浏览

asp.net - 在 WCF 中同时支持 Mtom 和 Text 作为 MessageEncoding

我有一个 WCF 服务,它有一个带有以下签名的方法:

它使用对象作为返回类型和最后一个参数的原因是因为它应该可以将任何类型作为参数传递并返回任何类型。

无论如何,我正在传递一个对象,其中包含以下属性:

为了启用大消息,我想开始使用 Mtom,而我之前使用纯文本作为 MessageEncoding 类型。

问题是,我希望它向后兼容,因此当前已经配置的客户端应该继续使用纯文本编码,而新客户端应该能够通过 web.config 使用 Mtom。

我的问题是:是否可以在默认情况下(现有客户端)继续使用纯文本作为 MessageEncoding 并同时提供 Mtom 编码?

我已经尝试了一些配置,比如定义具有不同绑定配置的多个端点,但我无法让它工作:

服务器

客户

问题是:

如果我没有在客户端设置 Mtom messageEncoding,那么一切都通过纯文本进行。但是当我将它设置为使用 Mtom 时,我会得到一个异常:

任何人都可以帮助我吗?:-)

0 投票
1 回答
3843 浏览

wcf - WCF 中的自定义消息编码器,支持 ReaderQuotas

在这里找到答案(最后一篇文章):http ://social.msdn.microsoft.com/Forums/eu/wcf/thread/f5c0ea22-1d45-484e-b2c0-e3bc9de20915

我在实现我的自定义 ( TextOrMtomEncoder ) 时遇到了最后一个问题,即 ReaderQuotas 的实现。

我在网上搜索了很多,但我无法弄清楚最后一块拼图。

我有一个类,其中包含我对“BindingElementExtensionElement”和“MessageEncodingBindingElement”的实现。

MessageEncodingBindingElement 实现包含以下内容的覆盖:

我从默认的 .NET MessageEncoding 实现中“借用”了它,例如 TextMessageEncoding

这必须是正确的实现,因为 MSDN 是这么说的。

从 web.config 加载配置很好,我可以看到我的两个类中的 ReaderQuotas 属性设置正确,但看起来 .NET 没有从我的 MessageEncodingBindingElement 实现中读取 ReaderQuotas 配置。

我的猜测是 .NET 使用 GetProperty 方法来加载配置,因为 MessageVersion 是通过此方法请求的。但问题是,T 永远不会等于 XmlDictionaryReaderQuotas,因此 ReaderQuotas 永远不会开始请求。

我的问题的根源是奇怪的顺便说一句,我正在使用 IIS7.5 的 Windows 7 x64 机器上开发。在我的机器上发布“大”文件(如 100 KB)。但是当我将服务部署到 Windows Server 2008 R2(尝试了 2 个不同的服务器)时,我收到以下错误:

格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数 http://socialproxy.infocaster.net:argument时出错。InnerException 消息是“反序列化 System.Object 类型的对象时出错。读取 XML 数据时已超出最大数组长度配额 (16384)。可以通过更改创建 XML 阅读器时使用的 XmlDictionaryReaderQuotas 对象的 MaxArrayLength 属性来增加此配额。第 1 行,位置 1584.'。有关更多详细信息,请参阅 InnerException。

就像我说的,它可以在我的机器上运行:-/

谁能告诉我如何解决这个问题?

提前谢谢了!

WCF 服务配置: