我在这里围绕这个区域有几个其他问题,但它们现在有点多余。对他们的任何答案也将不胜感激,但这个问题是我最关心的问题。WSE 3.0 - 字节数组被编码为Base64,而不是“MTOM-ing”以二进制形式
我遵循了很多关于MTOM/XOP如何在WSE 3.0中工作的例子,并且完全按照它的要求设置了我的项目。我有一个被指定为DataType的Byte数组字段:-base64Binary。在这我把我想添加的附件的字节数组。当我运行应用程序并检查请求时,数据以base64内联编码,即没有XOP包含元素和关联的MIME部分。
我对WSE 3.0中MTOM的理解是,在编码时,它会将任何指定为base64Binary的字段编码为二进制,并将其移动到MIME部分,并用XOP Include元素替换它。也就是说,它刚刚起作用。但是我已经在参考文件中设置了服务来继承Microsoft.Web.Services3.WebServicesClientProtocol
并且已经将RequireMtom
标志设置为true,并且它仍然没有正确编码。
我在这里错过了什么吗?是否还有其他步骤需要实施?
编辑:通过我的代码第100次查看后,我想知道是否可能是由于我必须在运行ProcessMessage方法之前序列化有效载荷的事实。这听起来像它可能是一个问题?我们已经序列化的原因是因为我们必须使用的方法接受一个具有content属性的“Payload”参数,这个content属性是一个XMLElement属性,我们唯一可以得到的就是序列化所需的类。但是,这是否会停止MTOM识别base64字段的数据类型,因此不会将其转换为MIME部分和XOP的二进制文件?现在只需要抓住吸管。
编辑2:虽然我有下面的解决方案,第三方公司现在说我们的命名空间前缀是错误的!我们有类似<q1:Attachment xmlns:q1="http://whatever" />
,他们要求它是<s:Attachment xmlns:s="http://whatever" />
。我会生气还是不重要?有没有一种方法可以告诉它如何分配命名空间前缀?
你有没有得到任何没有修改的例子工作? –
我发现的所有示例都需要一个更改才能工作,那就是将类更改为继承'Microsoft.Web.Services3.WebServicesClientProtocol'而不是'System.Web.Services.Protocols.SoapHttpClientProtocol'。一旦做出改变,一切正常。但是,这种改变并没有改变我的代码,因为我怀疑它在调用方法之前与序列化步骤有关。 – anothershrubery
每当我遇到这个例子工作的情况,但我的代码没有,我开始工作的例子,然后_slowly_重构它做我需要我的代码做。只要我分手,我就回到以前的工作代码,然后慢慢地走向我所需要的。这样,我最终发现了什么问题。 –