2016-04-25 4 views
1

Ich habe einen WCF-Client mit TransportWithMessageCredential-Sicherheitsmodus. Sie versuchen, wann Anfrage anmelden BeforeSendRequest mitWie wird die vollständige rohe WCF-Client-Anfrage von der Clientseite protokolliert?

public object BeforeSendRequest(ref Message request, IClientChannel channel) 
    { 
     System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\tmp\\request_log.xml"); 
     file.WriteLine(request.ToString()); 
     file.Close(); 

     return null; 
    } 

Ergebnis haben, ohne Sicherheitsetiketten

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
     <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">https://(skiped)</Action> 
    </s:Header> 
    <s:Body> 
    ... 
    </s:Body> 
</s:Envelope> 

Wie kann ich log voll roh Anfrage in Client? Es muss so sein

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
<s:Header> 
<o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
<u:Timestamp u:Id="_0"> 
<u:Created>...</u:Created> 
<u:Expires>..</u:Expires> 
</u:Timestamp> 
<o:BinarySecurityToken> 
<!-- Removed--> 
</o:BinarySecurityToken> 
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
<SignedInfo> 
... 
</SignedInfo> 
<SignatureValue>...</SignatureValue> 
<KeyInfo> 
<o:SecurityTokenReference> 
... 
</o:SecurityTokenReference> 
</KeyInfo> 
</Signature> 
</o:Security> 
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">skiped</Action> 
</s:Header> 
<s:Body> 
... 
</s:Body> 
</s:Envelope> 

UPD. Sicherheitsoptionen für

<security mode="TransportWithMessageCredential"> 
    <transport clientCredentialType="None" proxyCredentialType="None" 
     realm="" /> 
    <message clientCredentialType="Certificate" algorithmSuite="Basic256" /> 
</security> 

Antwort

1

This Bindung kann helfen:

public object BeforeSendRequest(ref Message request, IClientChannel channel) 
{ 
    MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue); 
    request = buffer.CreateMessage(); 
    Log("Request:" + Environment.NewLine + buffer.CreateMessage()); 
    return null; 
} 
+0

Das gleiche Ergebnis. Nur Tag in , keine Sicherheitstags – TNomade

+0

Das Ergebnis zeigt, dass Sie keine Sicherheit in Suppe Header haben! –

+0

Sie können überprüfen, ob Sie die Sicherheitsoptionen korrekt hinzugefügt haben. –

0

Sie auch Fiddler, die frei ist verwenden können. Wenn Ihr Endpunkt ist https sicher sein Zertifikatsvalidierung mit diesem

ServicePointManager.ServerCertificateValidationCallback = delegate {return true;}; 

umgehen, weil Fiddler sein eigenes Zertifikat verwendet, das für die Verbindung ungültig ist.

Verwandte Themen