2017-03-06 7 views
1

Ich habe Probleme beim Abfangen einer Antwortnachricht aufgrund eines ungültigen Umschlags. Leider wirft WCF die Ausnahme "Unerkannte Nachrichtenversion". bevor AfterReceiveReply aufgerufen wird, habe ich keine Möglichkeit, das Antwort-XML zu korrigieren. Gibt es einen niedrigeren (oder anderen) Aufruf, den ich verwenden kann, um den Stream abzufangen und dieses XML zu korrigieren, oder gibt es eine bessere Möglichkeit, die Antwort zu verarbeiten, d. H. CustomBinding?Ändern einer SOAP-Nachricht vor der Deserialisierung

Ich habe IClientMessageInspector AfterReceiveReply und IOperationBehavior versucht, aber diese Verhaltensweisen werden beide nach dem Auslösen der Ausnahme aufgerufen.

So sieht die Antwort aus.

<ENVELOPE> 
    <HEADER> 
     <ERROR_CODE>955</ERROR_CODE> 
     <ERROR_DESC>XML Parsing Failed: test:1:74 error: value '1231231230' does not match regular expression facet '\d{19,20}'</ERROR_DESC> 
     <ASYNCH_RESPONSE_INDICATOR>0</ASYNCH_RESPONSE_INDICATOR> 
    </HEADER> 
    <BODY> 
     <MY_METHOD_RESPONSE></MY_METHOD_RESPONSE> 
    </BODY> 
</ENVELOPE> 
+0

Sehen Sie sich die IErrorHandler-Schnittstelle an. https://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.ierrorhandler.aspx –

+0

@WilliamXifaras - das ist für die Service-Seite. OPs Problem ist Client-Seite –

Antwort

1

Der Dienst, den Sie anrufen möchten, ist kein SOAP-Dienst. Es sieht aus wie ein Web-Service im alten Stil POX, in diesem Fall gibt es zwei Möglichkeiten, wie Sie es verbrauchen können.

  1. Verwendung ein WCF POX-Client oder
  2. Verwendung HttpWebRequst

WCF zu verwenden, beziehen sich auf here und here. Ihr Problem besteht darin, dass diese Art von Diensten nun als unorthodox angesehen wird, sodass die späteren Versionen von WCF diese möglicherweise nicht mehr unterstützen.

Auf der anderen Seite ist HttpWebRequest, obwohl noch in. NET unterstützt wird, fiddly und nicht weit verbreitet. Es hat eine High-Level-Wrapper namens WebClient, die viel einfacher zu bedienen ist, aber es gibt Ihnen möglicherweise nicht die Kontrolle, die Sie benötigen.

Ich würde sicherlich die zweite Option zuerst untersuchen. Die Unterstützung für POX-Dienste in WCF wurde im Jahr 2008 mit der REST Toolkit, Microsofts erster Ausflug in die Welt außerhalb der SOAP-Dienste (.net Remoting trotz), und so ist ernsthaft datiert.

Verwandte Themen