微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net – SOAP 1.2在SOAP 1.1工作时产生错误请求

我创建了一个ASP.NET Web服务(asmx),允许第三方软件连接到我的解决方案.
当从服务器所驻留的服务器调用时,使用SOAP 1.1或ASP.NET的调用调用web服务时效果很好.

那么问题是什么,连接方只支持SOAP 1.2,当使用SOAP 1.2调用web服务时,它返回400 Bad请求.

我在web.config中启用了SOAP 1.2:

<configuration>
    <system.web>
        <webServices>
            <soapExtensionTypes>
                <add type="Microsoft.Web.Services2.WebServicesExtension,Microsoft.Web.Services2,Version=2.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35" priority="1" group="0" />
            </soapExtensionTypes>
            <protocols>
                <add name="HttpSoap12" />
                <add name="HttpGet" />
                <add name="HttpPost" />
            </protocols>
        </webServices>
    </system.web>
</configuration>

我将扩展用于另一部分,我试图通过特定于位置的配置禁用它,但是没有产生任何结果.

我启用了跟踪:

<system.diagnostics>
    <trace autoflush="true" />
    <sources>
        <source name="System.Web.Services.Asmx">
            <listeners>
                <add name="AsmxTraceFile" type="System.Diagnostics.TextWriterTraceListener" initializeData="D:\Trace.log" traceOutputoptions="LogicalOperationStack,DateTime,Timestamp,ProcessId,ThreadId" />
            </listeners>
        </source>
    </sources>
    <switches>
        <add name="System.Web.Services.Asmx" value="Verbose"  />
    </switches>
</system.diagnostics>

使用Chrome Advanced Rest Client我发送以下请求:

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <authenticateUser xmlns="http://services.kvh.nl/foo">
      <username>kvh</username>
      <password></password>
    </authenticateUser>
  </soap12:Body>
</soap12:Envelope>

这导致400错误请求和跟踪日志中的以下条目:

System.Web.Services.Asmx information: 0 : Calling IHttpHandlerFactory.GetHandler
    Caller: System.Web.Services.Protocols.WebServiceHandlerFactory#6565889::GetHandler()
    Request Host Address: 10.1.1.8
    Request Host Name: lb03.kvh.local
    Request Url: [POST] http://services.kvh.nl/Services/MyWebservice.asmx
    ProcessId=11272
    LogicalOperationStack=
    ThreadId=6
    DateTime=2014-05-22T13:28:45.1166408Z
    Timestamp=9623920014337
System.Web.Services.Asmx information: 0 : Calling XmlSerializer [Create XmlSerializer]
    Method: System.Xml.Serialization.XmlSerializer#1912278872::FromMappings(System.Xml.Serialization.XmlMapping[]#40573663=[24],System.Security.Policy.Evidence#667347099=..)
    Caller: System.Web.Services.Protocols.soapServerType#31148249::.ctor(WWW.Services.MyWebservice#477438864=WWW.Services.MyWebservice,System.Web.Services.Configuration.WebServiceProtocols#63=HttpGet,HttpPost,Documentation,HttpPostLocalhost,AnyHttpSoap)
    ProcessId=11272
    LogicalOperationStack=
    ThreadId=6
    DateTime=2014-05-22T13:28:45.1478409Z
    Timestamp=9623920106472
System.Web.Services.Asmx information: 0 : Return from XmlSerializer [Create XmlSerializer]
    Caller: System.Web.Services.Protocols.soapServerType#31148249::.ctor(WWW.Services.MyWebservice#477438864=WWW.Services.MyWebservice,AnyHttpSoap)
    ProcessId=11272
    LogicalOperationStack=
    ThreadId=6
    DateTime=2014-05-22T13:28:45.3038412Z
    Timestamp=9623920433863
System.Web.Services.Asmx information: 0 : Calling SoapExtension
    Method: Microsoft.Web.Services2.WebServicesExtension#3391963::ProcessMessage(System.Web.Services.Protocols.soapMessageStage#4=BeforeDeserialize)
    Caller: System.Web.Services.Protocols.soapServerMessage#31258077::RunExtensions(System.Web.Services.Protocols.soapExtension[]#34069029=[1],System.Boolean#0=False)
    ProcessId=11272
    LogicalOperationStack=
    ThreadId=6
    DateTime=2014-05-22T13:28:45.3038412Z
    Timestamp=9623920435703
System.Web.Services.Asmx information: 0 : Return from SoapExtension
    Caller: System.Web.Services.Protocols.soapServerMessage#31258077::RunExtensions(System.Web.Services.Protocols.soapExtension[]#34069029=[1],System.Boolean#0=False)
    ProcessId=11272
    LogicalOperationStack=
    ThreadId=6
    DateTime=2014-05-22T13:28:45.3506412Z
    Timestamp=9623920542168
System.Web.Services.Asmx Warning: 0 : Exception caught in System.Web.Services.Protocols.soapServerProtocolFactory#48477748::Create.
    System.Xml.XmlException: Root element is missing.
    ProcessId=11272
    LogicalOperationStack=
    ThreadId=6
    DateTime=2014-05-22T13:28:45.3506412Z
    Timestamp=9623920545216
System.Web.Services.Asmx Warning: 0 : Exception Details:
System.Xml.XmlException: Root element is missing.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo(String res)
   at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
   at System.Xml.XmlTextReaderImpl.Read()
   at System.Xml.XmlTextReader.Read()
   at System.Web.Services.Protocols.soapServerProtocol.soapEnvelopeReader.Read()
   at System.Xml.XmlReader.MovetoContent()
   at System.Web.Services.Protocols.soapServerProtocol.soapEnvelopeReader.MovetoContent()
   at System.Web.Services.Protocols.soapServerProtocolHelper.GetRequestElement()
   at System.Web.Services.Protocols.soap12ServerProtocolHelper.RouteRequest()
   at System.Web.Services.Protocols.soapServerProtocol.RouteRequest(SoapServerMessage message)
   at System.Web.Services.Protocols.soapServerProtocol.Initialize()
   at System.Web.Services.Protocols.ServerProtocol.SetContext(Type type,HttpContext context,HttpRequest request,HttpResponse response)
   at System.Web.Servic...
    ProcessId=11272
    LogicalOperationStack=
    ThreadId=6
    DateTime=2014-05-22T13:28:45.3506412Z
    Timestamp=9623920548659
System.Web.Services.Asmx Error: 0 : Exception thrown in System.Web.Services.Protocols.WebServiceHandlerFactory#6565889::CoreGetHandler().
    system.invalidOperationException: Failed to handle request.
    ProcessId=11272
    LogicalOperationStack=
    ThreadId=6
    DateTime=2014-05-22T13:28:45.3506412Z
    Timestamp=9623920549597

我已经用谷歌搜索了近乎精神错乱,但不幸的是我无法找到解决方案.

很感谢任何形式的帮助.

编辑:

不幸的是,rAhuID的建议删除了SOAP 1.1支持,但这并没有解决问题.我继续尝试了一些选项,例如清除所有协议,只添加HttpSoap12和文档,这看起来更糟糕.然后我删除了所有不需要的协议. XmlException从日志中消失,但我仍然收到400 Bad请求:(

我已经从本地计算机(使用hosts文件,因此我可以使用正确的主机名)进行测试,以排除代理服务器的问题.

Currrent web.config

<protocols>
    <!--
        <clear />
        <add name="Documentation" />
        <add name="HttpSoap12" />
    -->
    <remove name="HttpGet" />
    <remove name="HttpPost" />
    <remove name="HttpPostLocalhost" />
    <remove name="HttpSoap" />
</protocols>

诊断:

System.Web.Services.Asmx information: 0 : Calling IHttpHandlerFactory.GetHandler
    Caller: System.Web.Services.Protocols.WebServiceHandlerFactory#31931339::GetHandler()
    Request Host Address: 127.0.0.1
    Request Host Name: web01.kvh.nl
    Request Url: [POST] http://services.kvh.nl/services/MyWebservice.asmx
    ProcessId=15596
    LogicalOperationStack=
    ThreadId=10
    DateTime=2014-05-23T11:13:39.7977582Z
    Timestamp=9802327858068
System.Web.Services.Asmx information: 0 : Calling XmlSerializer [Create XmlSerializer]
    Method: System.Xml.Serialization.XmlSerializer#1912278872::FromMappings(System.Xml.Serialization.XmlMapping[]#53221370=[24],System.Security.Policy.Evidence#656725186=..)
    Caller: System.Web.Services.Protocols.soapServerType#63548859::.ctor(WWW.Services.MyWebservice#445910576=WWW.Services.MyWebservice,System.Web.Services.Configuration.WebServiceProtocols#40=Documentation,HttpSoap12)
    ProcessId=15596
    LogicalOperationStack=
    ThreadId=10
    DateTime=2014-05-23T11:13:39.8445582Z
    Timestamp=9802327942578
System.Web.Services.Asmx information: 0 : Return from XmlSerializer [Create XmlSerializer]
    Caller: System.Web.Services.Protocols.soapServerType#63548859::.ctor(WWW.Services.MyWebservice#445910576=WWW.Services.MyWebservice,HttpSoap12)
    ProcessId=15596
    LogicalOperationStack=
    ThreadId=10
    DateTime=2014-05-23T11:13:39.9849585Z
    Timestamp=9802328272841
System.Web.Services.Asmx information: 0 : Calling SoapExtension
    Method: Microsoft.Web.Services2.WebServicesExtension#59584177::ProcessMessage(System.Web.Services.Protocols.soapMessageStage#4=BeforeDeserialize)
    Caller: System.Web.Services.Protocols.soapServerMessage#64042303::RunExtensions(System.Web.Services.Protocols.soapExtension[]#63331368=[1],System.Boolean#0=False)
    ProcessId=15596
    LogicalOperationStack=
    ThreadId=10
    DateTime=2014-05-23T11:13:39.9849585Z
    Timestamp=9802328273636
System.Web.Services.Asmx information: 0 : Return from SoapExtension
    Caller: System.Web.Services.Protocols.soapServerMessage#64042303::RunExtensions(System.Web.Services.Protocols.soapExtension[]#63331368=[1],System.Boolean#0=False)
    ProcessId=15596
    LogicalOperationStack=
    ThreadId=10
    DateTime=2014-05-23T11:13:39.9849585Z
    Timestamp=9802328287199
System.Web.Services.Asmx information: 0 : Calling RouteRequest
    Method: System.Web.Services.Protocols.soapServerType#63548859::getmethod(System.String#768149269="http://services.kvh.nl/foo/authenticateUser")
    Caller: System.Web.Services.Protocols.soap12ServerProtocolHelper#31339276::RouteRequest()
    Request Host Address: 127.0.0.1
    Request Host Name: web01.kvh.nl
    Request Url: [POST] http://services.kvh.nl/services/MyWebservice.asmx
    ProcessId=15596
    LogicalOperationStack=
    ThreadId=10
    DateTime=2014-05-23T11:13:40.0005585Z
    Timestamp=9802328288057
System.Web.Services.Asmx information: 0 : Return from RouteRequest
    Caller: System.Web.Services.Protocols.soap12ServerProtocolHelper#31339276::RouteRequest()
    ProcessId=15596
    LogicalOperationStack=
    ThreadId=10
    DateTime=2014-05-23T11:13:40.0005585Z
    Timestamp=9802328288265
System.Web.Services.Asmx information: 0 : Return from IHttpHandlerFactory.GetHandler
    Caller: System.Web.Services.Protocols.WebServiceHandlerFactory#31931339::GetHandler()
    ProcessId=15596
    LogicalOperationStack=
    ThreadId=10
    DateTime=2014-05-23T11:13:40.0005585Z
    Timestamp=9802328288464

解决方法

尝试指定“AnyHttpSoap”而不是“HttpSoap12”.

或者如你所说,如果他们只支持1.2,那么只需从协议中删除“HttpSoap”,而不是添加“HttpSoap12”.

<protocols>
  <remove name="HttpSoap"/>
</protocols>

This可能有所帮助.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐