Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SoapHttpClientProtocol接收到意外的内容类型_C#_.net 3.5_Mtom_Wsdl.exe_Soaphttpclientprotocol - Fatal编程技术网

C# SoapHttpClientProtocol接收到意外的内容类型

C# SoapHttpClientProtocol接收到意外的内容类型,c#,.net-3.5,mtom,wsdl.exe,soaphttpclientprotocol,C#,.net 3.5,Mtom,Wsdl.exe,Soaphttpclientprotocol,我从wsdl-URL通过wsdl.exe创建了一个C#proxy类。我在一个不受我控制的web应用程序的上下文中使用这个代理类(因此无法更改web.conf或类似内容)。我也无法更改与我交谈的web服务中的任何内容 调用web服务时,我收到以下异常: Client found response content type of 'multipart/related; type="application/xop+xml"; boundary="uuid:5c314128-0dc0-4cad-9b1

我从
wsdl
-URL通过
wsdl.exe
创建了一个C#proxy类。我在一个不受我控制的web应用程序的上下文中使用这个代理类(因此无法更改
web.conf
或类似内容)。我也无法更改与我交谈的web服务中的任何内容

调用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'.
试试看。。。
getDocuments
中的catch
是一种黑客解决方法,它从异常
消息中获取“真正”的服务响应,而这并不是我真正想要实现的方法


因此,我的问题是:有没有办法更改代理类中的绑定以接受
MTOM
响应?

从我为提供帮助所做的少量研究来看,如果您确实可以访问web配置(我知道您没有)打开MTOM后,Visual Studio将生成两个代理类:

  • 源于SoapHttpClientProtocol的标准协议,以及
  • 派生自Microsoft.Web.Services3.WebServicesClientProtocol的类名称后附加有“WSE”的WSE类
  • 能够接受MTOM的是WebServicesClientProtocol实现。要让WSDL创建一个从WebServicesClientProtocol派生的代理,请遵循下面的说明

    希望这能解决问题

    [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());
            }
        }
    }