2017-07-07 9 views
0

Ich habe ein verblüffendes Problem. Ich habe Web Service A (fortan WSA), eine 3.5. Net WCF, die ich einen Aufruf an Web Service B (fortan WSB) hinzugefügt, die eine 3,5. NET ASMX ist. Wenn WSA in dem Client (SOAPUI oder WCFStorm) ausgeführt wird, überschreitet der WSB-Aufruf das Timeout für Client-Zeitlimit.Web-Service-Fehler 400 - ungültige Anforderung

Im VS-Ereignisanzeige kann ich sehen, dass der Anruf sofort zu WSB zwei Fehlern 400s wirft:

Exception thrown: 'System.Net.WebException' in System.dll ("The remote server returned an error: (400) Bad Request."). Exception thrown: 'System.Net.WebException' in System.dll ("The remote server returned an error: (400) Bad Request.")

kein Grund gegeben ist. Was mir genauso rätselhaft ist, ist, dass der Fehler nicht auf meinen Haken geht. Wenn ich debugge und die Codezeile wähle, die WSB aufruft, ist das wie ein Reset. Kein weiterer Code wird ausgeführt und kein Fehler wird von meinem WSA ausgelöst.

Wenn ich WSB direkt anrufe, funktioniert es. Also nichts ist falsch mit WSB. Auf Vorschlag eines Mitarbeiters nahm ich den für meine Änderung spezifischen Code und stellte ihn in einen eigenständigen Dienst. Ich wörtlich C & P den Code und Einstellungen für mich spezifisch und Namespaces und Klassennamen anpassen. Und siehe da, es funktioniert. Mein Stand-alone-Web-Service namens WSB ist in Ordnung und bekommt die Daten, die ich erwarte.

Ein Mitarbeiter und ich überprüften die Protokolle (IIS-Protokoll für den Dienst und das HTTPERR-Protokoll) auf dem IIS-Server, auf dem sich WSB befindet, um festzustellen, ob der 400-Fehler erwähnt wurde. Wir haben keine gefunden.

So sind wir an dieser Stelle etwas verblüfft. Das einzige, was wir uns vorstellen können, ist vielleicht etwas in der Web-Konfiguration könnte stören, aber keine Ahnung, was es sein könnte.

Wenn Sie Vorschläge haben, wo Sie sonst noch suchen könnten, wäre das hilfreich.

Und es wäre nett zu wissen, warum es nicht in meinen Fehlerhandler fällt.

Danke.

Update: Es wurde angefordert, ich füge Config und Code hinzu. Ich denke nicht, dass es ehrlich helfen wird und es ist ziemlich einfach. Ich kann nicht den echten Code aus betrieblichen Gründen setzen, aber es ist im Grunde diese:

In Web-config:

<configuration> 
    <appSettings> 
    <add key="endpointUrl" value = "someurl" /> 
    </appSettings> 
    . 
    . 
    . 
    <applicationSettings> 
     <MyService.Properties.Settings> 
      <setting name="MyService_TheirService" 
      serializeAs="String"> 
      <value>someurl</value> 
      </setting> 
    </MyService.Properties.Settings> 
    </applicationSettings> 

Auch wenn die Daten super klein ist, ich versuchen, große Leser Einstellungen vorgenommen haben und so:

<binding name="CustomHtttpBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" closeTimeout="01:50:00" openTimeout="01:50:00" sendTimeout="01:50:00" receiveTimeout="01:50:00" > 
      <readerQuotas maxDepth="128" 
      maxStringContentLength="8388608" 
      maxArrayLength="2147483646" 
      maxBytesPerRead="4096" 
      maxNameTableCharCount="16384" /> 
     </binding> 

Code:

using MyService.TheirService 
. 
. 
. 
var theirURL = ConfigurationManager.AppSettings["endpointUrl"]; 

var oSvc = new TheirServiceObject 
{ 
    Url = theirURL 
}; 

int numberIneed = oSvc.SomeMethod(); 

das letzte Zeile ist, wo führt es die 400.

UPDATE 2:

Ein Kollege mir zeigen, wie Fiddler zu verwenden. Und ich kann jetzt sehen, dass die Anfrage an WSB absoluter Müll ist.

xڭ s 6 mr!!u \ .3 5'3 G QOH>Iп kX M3 ~vY) X e Z w ~ :jv -ݴwڽHb Yqv A :(Q Z; >9W O0g 6 .ɖVlU Ţ 8Z < ( t eSv U]r R $N \

Einige seltsame Codierung? Zumindest ist es ein weiterer Hinweis.

+0

Es wäre hilfreich, einige Code- und Konfigurationsabschnitte zu veröffentlichen, sonst erhalten Sie wahrscheinlich nur die Antworten, die Ihnen sehr allgemein und wahrscheinlich nicht hilfreich sind. – Tim

Antwort

0

Wir wollten Sie wissen lassen, dass dieses Problem gelöst wurde. Ein anderer Dev, der schon vorher an diesem Service gearbeitet hatte, ist nun nicht mehr zufällig vorbeigekommen und ich sagte "Hey! Schau dir das an!"

Sie sahen die Müll-Anfrage-Daten und sagte:" Das sieht wie eine Komprimierung aus. Komprimierung im Projekt nachschlagen. "

Es stellte sich heraus, dass eine benutzerdefinierte Komprimierungskomponente vorhanden war, die die ausgehenden Daten des Service komprimierte und zwei Zeilen Code zum Dekomprimieren hinzufügte. Nachdem diese Zeilen an den Anfang meiner Datei hinzugefügt wurden methode alles hat sofort funktioniert

Die Lektion hier ist, wenn Ihr Projekt einige seltsame Sachen macht, die der Vernunft trotzen, versuchen Sie, so viele Leute wie möglich zu finden, die daran gearbeitet haben, auch wenn sie nicht mehr daran arbeiten.

Verwandte Themen