C# SOAP服务调用-获取元素的非法请求格式时出错

C# SOAP服务调用-获取元素的非法请求格式时出错,c#,service,wsdl,C#,Service,Wsdl,我们正在集成来自第三方的服务。他们最近升级了他们的服务,现在有了新的wsdl,我不断得到“元素的非法请求格式” 根据我的调查,问题似乎在于添加到主元素上的xmlns。如果我使用SOAPUI并从main元素中删除xmlns,它会工作,但是visualstudio会根据wsdl中定义的内容自动添加它 有趣的是,在他们以前的wsdl中,服务与包含的xmlns一起工作,只有在新的wsdl中才会抛出异常 就wsdl而言,我所知道的是,他们使用JD 12并手动创建了wsdl,但是经过比较,它看起来与旧的ws

我们正在集成来自第三方的服务。他们最近升级了他们的服务,现在有了新的wsdl,我不断得到“元素的非法请求格式”

根据我的调查,问题似乎在于添加到主元素上的xmlns。如果我使用SOAPUI并从main元素中删除xmlns,它会工作,但是visualstudio会根据wsdl中定义的内容自动添加它

有趣的是,在他们以前的wsdl中,服务与包含的xmlns一起工作,只有在新的wsdl中才会抛出异常

就wsdl而言,我所知道的是,他们使用JD 12并手动创建了wsdl,但是经过比较,它看起来与旧的wsdl相似,xmlns中的名称是唯一的区别

这是visual studio创建的请求:


1.x
使用“xmlns=”http://gna160ws/Management.wsdl/types/""问题出在哪里?

答复:


gna160.萃取剂
1200
ExtractAccateGelement的请求格式非法。
当提交相同的请求,但没有xmlns时,我得到了一个有效的响应。例如:


1.x
答复:


0
成功
gna160pkg.extractaccateg
1.
A.
AAA
另外,如果我在xmlns之后添加一个限定符,那么它也可以工作?? 例如:

xmlns:hello=”http://gna160ws/Management.wsdl/types/"

我一直在与开发人员合作,但我们还没有发现问题


如果有人能帮助我或为我指出正确的方向,我们将不胜感激。

您是否用新的WSDL更新了您的服务引用

或者,您可以从Rick Strahl处尝试此操作:重写以下函数以添加自定义命名空间

protected override void OnWriteStartEnvelope(XmlDictionaryWriter writer)
{
        writer.WriteStartElement("soapenv", "Envelope", "http://schemas.xmlsoap.org/soap/envelope/");
        writer.WriteAttributeString("xmlns", "oas", null, "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
        writer.WriteAttributeString("xmlns", "v2", null, "http://www.royalmailgroup.com/api/ship/V2");
        writer.WriteAttributeString("xmlns", "v1", null, "http://www.royalmailgroup.com/integration/core/V1");
        writer.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
        writer.WriteAttributeString("xmlns", "xsd", null, "http://www.w3.org/2001/XMLSchema");            
}

对于他的完整文章

是的,我确实更新了服务参考。感谢您提出上述答案,但是我有多个不同的服务,上面的内容不会影响对不同服务的所有请求吗?此外,我不知道上面的内容是否有效,因为我需要从元素中完全删除xmlns,或者在xmlns后面添加一个限定符,如:name