gpt4 book ai didi

c# - SoapHttpClientProtocol 收到意外的内容类型

转载 作者:太空宇宙 更新时间:2023-11-03 10:36:56 25 4
gpt4 key购买 nike

我通过 wsdl.exeWSDL-URL 创建了一个 C# 代理类。我在我无法控制的 Web 应用程序的上下文中使用此代理类(因此无法更改 web.conf 或类似内容)。我也无法更改正在与之通信的 Web 服务中的任何内容。

调用网络服务时,我收到以下异常:

Client found response content type of 'multipart/related; type="application/xop+xml"; 
boundary="uuid:5c314128-0dc0-4cad-9b1a-dc4a3e5917bb"; start="<root.message@cxf.apache.org>";
start-info="application/soap+xml"', but expected 'application/soap+xml'.

据我所知,这是 MTOM 的问题正在被网络服务使用。现在我试图让我的类(class)接受 MTOM,但我发现的只是 web.conf 中的配置。

代理类派生自 SoapHttpClientProtocol,如下所示(相关部分):

[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]    
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name = "myrequestSoapBinding", Namespace = "http://namespace.of.company.of.webservice/")]
public class myrequest : System.Web.Services.Protocols.SoapHttpClientProtocol
{
public myrequest(string url)
{
this.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12;
this.Url = url;
}

[return: System.Xml.Serialization.XmlElementAttribute("return", Form = System.Xml.Schema.XmlSchemaForm.Unqualified, DataType = "base64Binary")]
public byte[] getDocuments([System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified, DataType = "base64Binary")] byte[] input)
{
try
{
object[] results = this.Invoke("getDocuments", new object[] {
input});
return ((byte[])(results[0]));
}
catch (Exception ex)
{
var realResponse = StripResponse(ex.Message);
return Encoding.UTF8.GetBytes(realResponse.ToString());
}
}
}

getDocuments 中的 try ... catch 是一个 hacky workaround,它从异常 Message 中获取“真正的”服务响应 -这不是我真正想要实现的方式。

所以我的问题是:有没有办法更改代理类中的绑定(bind)以接受 MTOM 响应?

最佳答案

从我为提供帮助所做的少量研究来看,如果您确实可以访问网络配置(我知道您没有)并且您转身在 MTOM 上,Visual Studio 将生成两个代理类:

  1. 一个标准的派生自 SoapHttpClientProtocol,并且;
  2. 派生自 Microsoft.Web.Services3.WebServicesClientProtocol
  3. 的类名后附加“Wse”的 WSE 类

能够接受 MTOM 的是 WebServicesClientProtocol 实现。要让 WSDL 创建派生自 WebServicesClientProtocol 的代理,请遵循 top of this MSDN article 中的注释.

希望这能解决问题。

关于c# - SoapHttpClientProtocol 收到意外的内容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27403344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com