2017-08-23 81 views
0

我有一個簡單的託管WCF服務與ASP.NET並排,並有困難的時間調試/步入到服務。以下是這些文件。提前致謝!如何調試與ASP.NET並列託管WCF服務

的Web.config

<system.web> 
    <compilation debug="true" targetFramework="4.5.2"/> 
    <httpRuntime targetFramework="4.5.2"/> 
    </system.web> 

    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="mexBehavior"> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 

    <services> 
     <service name="WCF_TestService.TestService" behaviorConfiguration="mexBehavior"> 
     <endpoint address="" binding="basicHttpBinding" contract="WCF_TestService.ITestService"></endpoint> 

     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8080/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 

    </system.serviceModel> 

ITestService.cs

namespace WCF_TestService 
{ 
    [ServiceContract] 
    public interface ITestService 
    { 
     [OperationContract] 
     string GetMessage(string name); 
    } 
} 

TestService.svc.cs

的斷點設置在return和提示消息是The breakpoint will not currently be hit. No symbols have been loaded for this document

namespace WCF_TestService 
{ 
    public class TestService : ITestService 
    { 
     public string GetMessage(string name) 
     { 
      return $"Hello {name}"; 
     } 
    } 
} 

客戶

客戶端是控制檯應用程序。

namespace Client 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      ServiceProxy.TestServiceClient client = new ServiceProxy.TestServiceClient(); 
      Console.WriteLine(client.GetMessage("John Smith")); 
      Console.ReadLine(); 
     } 
    } 
} 
+0

項目是否包含在同一個解決方案中? WCF服務是通過IIS運行還是自託管? –

+0

@TravisActon他們在同一個解決方案中。它通過IIS10運行。 –

回答

1

根據您對同一解決方案中的兩個項目的評論以及WCF未託管的情況,您需要配置解決方案以擁有多個啓動項目。

在解決方案資源管理器中,選擇解決方案,右鍵單擊並選擇屬性。在彈出窗口中展開Common Properties選項,然後點擊Startup Project。點擊多個啓動項目並選擇您的項目並構建操作。設置適當的順序(在這種情況下WCF首先)

另外不要忘記更改您的控制檯應用程序的端點地址,以指向您的wcf項目在運行時運行的相應IIS端口,它可能位於你最好的興趣來設置配置轉換調試,並刺激,所以你不會經常在你的配置中切換這些。

如果您創建控制檯項目的唯一原因是與您的WCF服務進行交互以進行測試,那麼我會敦促您改用WCF Test CLient。它應該默認安裝在任何VS實例上。

+0

感謝特拉維斯,這將做的伎倆。另一個問題是爲什麼正常的附加過程不適用於這種項目設置? –

+0

@JasonTang如果您的代碼部署到本地IIS,但正常連接應該工作得很好,但您必須將構建路徑更改爲您的IIS bin目錄重建,然後運行,以便一切都完美地保持最新。我一直髮現這樣做更靈活/不那麼敏感,特別是當你在一個項目中進行開發時。 –

0

也許這個回答是一樣的這個話題。

How to debug WCF programs

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

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

    • 如果在獨立的應用程序或Windows服務中,請附上您的exe名稱。

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

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

嘗試使用系統管理員運行Visual Studio。也許你提到了錯誤的進程,或者運行的版本不是調試版本。

備選

您可以在兩個項目中右鍵單擊,然後單擊「調試」 - >「啓動新實例」。 Visual Studio在Debug模式下啓動兩個項目。

+0

我試圖附加'w3wp.exe'過程,但沒有運氣。 –

+0

嘗試使用系統管理員運行Visual Studio。也許你提到了錯誤的進程,或者運行的版本不是調試版本。 您可以在兩個項目中點擊右鍵,然後點擊「Debug」 - >「Start New Instance」。 Visual Studio在Debug模式下啓動兩個項目。 –