Ich habe einen ASP.NET-Webdienst (asmx) erstellt, damit Drittanbietersoftware eine Verbindung zu meiner Lösung herstellen kann. Der Webservice funktioniert gut, wenn er über SOAP 1.1 oder über das ASP.NET-Aufrufformular aufgerufen wird, wenn er von dem Server aufgerufen wird, auf dem er sich befindet.SOAP 1.2 führt zu einer fehlerhaften Anforderung, während SOAP 1.1 funktioniert
Also, was ist das Problem, die Verbindungspartei unterstützt nur SOAP 1.2, beim Aufruf des Webservice mit SOAP 1.2 400 Schlechte Anfrage zurückgibt.
Ich habe SOAP 1.2 in der web.config aktiviert:
<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>
Ich benutze die Erweiterung für einen anderen Teil habe ich versucht, es durch standortspezifische Konfiguration zu deaktivieren, aber das brachte keine Ergebnisse.
Ich habe aktiviert Tracing:
<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>
die Chrome erweiterte REST-Client verwendet ich folgende Anfrage senden:
<?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>
, die in einem 400 Bad Request führt und der folgende Eintrag in dem Trace-Protokoll :
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, System.Web.Services.Configuration.WebServiceProtocols#63=HttpGet, HttpPost, Documentation, HttpPostLocalhost, 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
Ich habe in der Nähe von Wahnsinn gegoogled, aber leider habe ich nicht abl e um eine Lösung zu finden.
Jede Hilfe wird sehr geschätzt.
EDIT:
Leider rAhuID Vorschlag te entfernen SOAP 1.1-Unterstützung das Problem nicht lösen. Ich fuhr fort und probierte ein bisschen mehr Option wie das Löschen aller Protokolle und das Hinzufügen nur von HttpSoap12 und Dokumentation, die das Problem noch verschlimmern. Ich habe dann alle Protokolle entfernt, die nicht benötigt werden. Die XmlException ist aus den Protokollen verschwunden, aber ich bekomme immer noch eine 400 Bad-Anfrage :(
Ich habe von der lokalen Maschine getestet (mit der hosts-Datei, damit ich den korrekten Hostnamen verwenden kann), um den Proxyserver als Problem auszuschließen
Currrent web.config.
<protocols>
<!--
<clear />
<add name="Documentation" />
<add name="HttpSoap12" />
-->
<remove name="HttpGet" />
<remove name="HttpPost" />
<remove name="HttpPostLocalhost" />
<remove name="HttpSoap" />
</protocols>
Diagnose:.
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, System.Web.Services.Configuration.WebServiceProtocols#40=Documentation, 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
Vielen Dank, du hast mir gerade eine Menge Frustration erspart! – mrexodia