2016-04-25 13 views
1

У меня есть клиент WCF с режимом TransportWithMessageCredential security. При попытке войти в запрос с помощью BeforeSendRequestКак зарегистрировать полный необработанный запрос клиента WCF с клиентской стороны?

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; 
    } 

есть результат без тегов безопасности

<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> 

Как я могу войти полный необработанный запрос в клиенте? Это должно быть таким образом

<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. Параметры безопасности для связывания

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

ответ

1

я не нашел, как это сделать в C#, но захватили необработанный запрос с использованием Charles SSL proxying

Запрос содержит всю безопасность теги.

В статье, которая помогла мне так много Tracing-WCF-Messages

1

This может помочь:

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

Тот же результат. Только тег в , без тегов безопасности – TNomade

+0

Результат показывает, что у вас нет безопасности в заголовке супа! –

+0

Вы можете проверить, правильно ли добавлены параметры безопасности. –

0

Вы также можете использовать Fiddler, который является бесплатным. Если конечная точка HTTPS обязательно обойти проверку сертификата с этим

ServicePointManager.ServerCertificateValidationCallback = delegate {return true;}; 

потому что Fiddler использует свой собственный сертификат, который недопустим для подключения.

 Смежные вопросы

  • Нет связанных вопросов^_^