2012-01-06 41 views
12

我的代碼使用大量的WCF調用,當我嘗試調試它時,它不會轉到服務代碼本身。有沒有辦法以某種方式調試WCF代碼?如何調試WCF程序

+0

如何運行WCF服務?在IIS內部還是作爲獨立應用程序? – 2012-01-06 02:39:08

回答

13

您需要將調試器附加到您的WCF服務中運行的進程。

如果在IIS你需要連接到相應的w3p.exe過程。

如果在一個獨立的應用程序或Windows服務,附加到您的EXE的名稱。

在Visual Studio中,在調試器菜單上有一個「附加到進程」。打開相關的代碼,設置一個斷點,然後調用導致該代碼路徑執行的服務。

在調試之外,使用可切換級別的.net跟蹤是瞭解正在發生的事情的好方法。我通常將sys內部的debugview設置爲顏色突出顯示錯誤和警告,並在運行代碼或測試時不斷運行它。在工作中,我的周圍視覺中出現彩色線條,這些線條會發現問題

2

附加到服務本身,而不是調用它的代碼。

3

要在visual studio 2010中調試WCF服務,請轉到Debug - > Attach to Process。選中「顯示所有用戶的進程」,如果使用的是IIS,則選擇w3p.exe,否則選擇應用程序的名稱。放入一個斷點,進行調用,然後可以開始調試。

如果它是一個web應用程序(我建議這樣做),您可以右鍵單擊該項目,轉到Web選項卡,然後在開始操作下選擇「不要打開頁面,等待來自外部的請求應用」。保存並關閉此設置,然後按F5開始調試。

+0

Web應用程序調試爲我節省了大量時間! – 2017-03-01 08:35:36

11

如果您正在尋找跟蹤的WCF活動,看是否以正確的順序產生的流量,那麼我會推薦以下方法之一:

1)使用fiddler觀看WCF流量。

2)使用WCF跟蹤偵聽器來監視實際的WCF調用。這在嘗試確定序列化失敗的原因時非常有用。您可以通過添加以下塊你的web.config的配置塊啓用此:

上生成的文件將打開WCF服務日誌查看器,這將分析該文件爲你,讓你
<system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel" 
       switchValue="Information, ActivityTracing" 
       propagateActivity="true"> 
     <listeners> 
      <add name="traceListener" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData="c:\log\WebTrace.svclog" /> 
     </listeners> 
     </source> 
    </sources> 
    </system.diagnostics> 

雙擊鑽入特定的調用並查看發生的實際異常。

+1

這對我來說**非常有用。非常感謝! – LoBo 2013-02-15 11:15:11

1

當運行一個訪問WCF應用服務有經常參與

  • 客戶端程序兩個過程被訪問WCF服務
  • 服務器的過程,承載WCF服務

這聽起來像你正在調試客戶端進程。爲了逐步執行實際的WCF服務代碼,您需要將Visual Studio調試器附加到託管服務的進程,並在代碼中設置斷點。

注意:Visual Studio可以同時附加到多個進程,因此您可以在同一會話中調試客戶端和服務器代碼。使用

  • 工具 - >附加到進程
12

有一個更簡單的方法。只需在Visual Studio中啓動多個進程。右鍵點擊解決方案。點擊屬性。選擇啓動項目。點擊多個啓動項目。將WCF和客戶端項目設置爲Action = Start。現在您將逐步瀏覽WCF以及客戶端。

+0

這可能應該被選作正確答案 – Sergei 2016-03-27 13:44:31

0

在我的情況,我在Visual Studio中設置的WCF網站爲StartUp Project並直接在調試模式下運行的WCF,

在Visual Studio Solution Explorer中的WCF產品,如:

enter image description here

WCF開始後,有會在瀏覽器中的新網頁顯示,其網址會喜歡http://xxxx:xxport/Service.svc,複製此URI和誰調用這個WCF其它程序使用它,

然後在程序調用的方法中設置斷點,程序執行時將成功輸入斷點。