2011-12-09 72 views
1

我仍然試圖讓WCF與CXF交談。我使用了http://rocksolidknowledge.com/Download.mvc的示例,它看起來像代碼一樣工作,因爲當我更改客戶端中的用戶名時,我在服務中看到新的用戶名。如何在使用SSL加密的標頭中使用用戶名/密碼來調試WCF客戶端

我試圖在客戶端app.config中添加日誌記錄以保存正在發送到服務的內容。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
     <bindings> 
      <wsHttpBinding> 
       <binding name="WSHttpBinding_Av1Service" closeTimeout="00:01:00" 
        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
        bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
        messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
        allowCookies="false"> 

       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <reliableSession ordered="true" inactivityTimeout="00:10:00" 
        enabled="false" /> 

       <security mode="TransportWithMessageCredential"> 
         <transport clientCredentialType="None" proxyCredentialType="None" 
          realm="" /> 
         <message clientCredentialType="UserName" negotiateServiceCredential="true" 
          algorithmSuite="Default" establishSecurityContext="true" /> 
        </security> 

       <!-- 
       <security mode="None"> 
        <transport clientCredentialType="None" proxyCredentialType="None" 
         realm="" /> 
        <message clientCredentialType="UserName" negotiateServiceCredential="true" 
         algorithmSuite="Default" establishSecurityContext="true" /> 
       </security> 
       --> 
       </binding> 
      </wsHttpBinding> 
     </bindings> 
     <behaviors> 
     <endpointBehaviors> 

      <behavior name="client"> 
      <clientCredentials> 
       <serviceCertificate> 
       <authentication certificateValidationMode="None"/> 
       </serviceCertificate> 
      </clientCredentials> 
      </behavior> 
     </endpointBehaviors> 
     </behaviors> 
     <client> 

      <endpoint address="https://darsdevlaptop:8015/DarsWebServices/services/av1" binding="wsHttpBinding" 
       bindingConfiguration="WSHttpBinding_Av1Service" contract="Av1ServiceReference.Av1Service" 
       name="WSHttpBinding_Av1Service" /> 

      <!-- 
      <endpoint 
       address="http://localhost:9015/DarsWebServices/services/av1" binding="wsHttpBinding" 
       bindingConfiguration="WSHttpBinding_Av1Service" contract="Av1ServiceReference.Av1Service" 
       name="WSHttpBinding_Av1Service" /> 
      --> 
     </client> 
     <diagnostics> 
     <messageLogging logEntireMessage="true" 
         logMalformedMessages="true" 
         logMessagesAtServiceLevel="true" 
         logMessagesAtTransportLevel="true" 
         maxMessagesToLog="3000" 
         maxSizeOfMessageToLog="2000"/> 
     </diagnostics> 
    </system.serviceModel> 
</configuration> 

該配置生成client_msg.svclog文件,我可以使用Microsoft Service Trace Viewer查看該文件。而這個文件中我看到

E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent"> 
<System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system"> 
<EventID>0</EventID> 
<Type>3</Type> 
<SubType Name="Information">0</SubType> 
<Level>8</Level> 
<TimeCreated SystemTime="2011-12-08T15:27:46.1360000Z" /> 
<Source Name="System.ServiceModel.MessageLogging" /> 
<Correlation ActivityID="{00000000-0000-0000-0000-000000000000}" /> 
<Execution ProcessName="Clieint.vshost" ProcessID="5660" ThreadID="10" /> 
<Channel /> 
<Computer>DARSDEVLAPTOP</Computer> 
</System> 
<ApplicationData> 
<TraceData> 
<DataItem> 
<MessageLogTraceRecord Time="2011-12-08T10:27:46.1320000-05:00" Source="ServiceLevelSendRequest" Type="System.ServiceModel.Channels.BodyWriterMessage" xmlns="http://schemas.microsoft.com/2004/06/ServiceModel/Management/MessageTrace"> 
<HttpRequest> 
<Method>POST</Method> 
<QueryString></QueryString> 
<WebHeaders> 
<VsDebuggerCausalityData>uIDPo7bjbPmwsKdKqJIT7OFhvN8AAAAA+hhv3g5Q+UymaaUAoh1MoXMwGPaCPSlAoTQw7kFj3m8ACQAA</VsDebuggerCausalityData> 
</WebHeaders> 
</HttpRequest> 
<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope"> 
<s:Header> 
<a:Action s:mustUnderstand="1">http://tempuri.org/IPing/Ping</a:Action> 
<a:MessageID>urn:uuid:85d46f93-9798-41c4-a8fd-e862b3858d46</a:MessageID> 
<a:ReplyTo> 
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address> 
</a:ReplyTo> 
</s:Header> 
<s:Body> 
<Ping xmlns="http://tempuri.org/"></Ping> 
</s:Body> 
</s:Envelope> 
</MessageLogTraceRecord> 
</DataItem> 
</TraceData> 
</ApplicationData> 

而且我沮喪沒有找到用戶名或密碼

<s:Header> 
    <a:Action s:mustUnderstand="1">http://tempuri.org/IPing/Ping</a:Action> 
    <a:MessageID>urn:uuid:85d46f93-9798-41c4-a8fd-e862b3858d46</a:MessageID> 
    <a:ReplyTo> 
     <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address> 
    </a:ReplyTo> 
</s:Header> 

我也嘗試運行fiddler2任何引用,但我沒有看到任何的用戶名/密碼有無論是。 那麼發生了什麼?我是否錯過了如何使用視圖工具?它是否被傳遞不在標題中?如果是這樣,我該如何解決這個問題!

只是爲了解釋爲什麼我關心這個:

  • 我給基於樣品到我的客戶交談的CXF 服務,我找回報告代碼是用戶名/密碼 未被傳遞。
  • 我實際上無法自己調試通信,因爲我看不到 以讓WCF從CXF獲取測試證書。
  • 一切工作都很好WCF WCF但這不是什麼客戶 需要。

我感覺非常難倒。謝謝你的幫助。

回答

0

我沒有看到正在設置的診斷源。如此。

<system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel.MessageLogging"> 
     <listeners> 
       <add name="messages" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData="c:\logs\messages.svclog" /> 
      </listeners> 
     </source> 
    </sources> 
</system.diagnostics> 

我希望你看了這個msdn article.

+0

感謝,這是有益的。現在我看到<! - 已刪除 - ><! - 已刪除 - >所以我離得更近,但我仍然無法證明用戶名和密碼正在發送。 –

+0

如果您在日誌中看到正在傳遞的用戶名密碼。你的客戶方很好。客戶端沒有什麼可以證明的。時間看服務器:)你有控制它。 – Chandermani

+0

我沒有看到用戶名和密碼,因爲我得到< - 刪除 - >代替。但基於http://social.msdn.microsoft.com/Forums/en/wcf/thread/9b4d8f5c-bdb6-45f0-be5e-e014cccab831,也許這是我能做的最好的。 –

相關問題