2011-07-29 141 views
4

因此我們運行在SOA架構中。我有一個服務,我正在嘗試調試來自不同解決方案中的WinForms應用程序的調用。調試到WCF服務

在這個Winforms應用程序中,我已經在app.config中正確引用了localhost上的服務,現在我想啓動WCF服務的一個實例,以便我可以設置一個斷點並逐步完成它。

當我進入服務時,我右鍵單擊該項目,轉到屬性,然後在「開始操作」下選擇services bin/debug /目錄中的.exe文件。然後我保存,編譯並按F5啓動它的一個實例。我得到這個錯誤:

enter image description here

我應該怎麼做?

+0

您是如何託管此服務的?在IIS下或作爲Windows服務? – Jeff

+0

這是一個Windows服務,而不是IIS – slandau

+0

您將不得不附加到它。調試 - >附加到進程 – ppiotrowicz

回答

6

你必須在一個進程中託管服務,然後從那裏調試它。這可以像編寫一個控制檯應用程序來承載服務,或編寫一個Windows服務來承載它,或者一個Windows窗體應用程序,或將它託管在IIS中一樣簡單。

,你可以在一個控制檯應用主機,像這樣:

static void Main(string[] args) 
{ 
    using (ServiceHost host = new ServiceHost(typeof(YourNamespace.YourServiceInterface))) 
    { 
    host.AddServiceEndpoint(typeof(
YourNamespace.YourServiceInterface), new NetTcpBinding(), "net.tcp://localhost:9000/YourService"); 
    host.Open(); 

    Console.WriteLine("Press <Enter> to terminate the Host 
application."); 
    Console.WriteLine(); 
    Console.ReadLine(); 
    } 
} 

this article展示瞭如何在Windows服務的主機。我會建議增加

Debugger.Launch(); 

爲第一線的OnStart方法,以便在服務啓動時,您可以附加調試器。這將有助於調試任何啓動問題。否則,你可以從Debug菜單中選擇AttachToProcess,然後附加到正在運行的windows服務上。

你需要添加using System.Diagnostics使用Debugger.Launch();方法

1

您必須將您在本地構建的服務安裝爲Windows服務,然後附加到該服務。

1

是IIS或下運行該服務自託管?無論哪種方式,一旦服務運行,您可以通過進入Debug-> Attach Process來附加它。

如果在IIS下運行,則需要查找w3wp.exe(IIS 7)進程。請注意,要附加到此過程,您很可能必須以管理員身份運行VS。如果您運行的是舊版本的IIS,則該過程稱爲aspnet_XXX。

一旦你連接,你可以放入你的斷點並根據需要進行調試。

+0

它是自己託管的 – slandau

0

嗯,當你嘗試運行/調試一個類庫項目時,你有這個錯誤,所以檢查你的服務項目是不是那種。

如果你想很容易(而且也沒有設計infraestructure問題),從VS運行/調試然後使它它承載服務,像項目網站上的WCF服務應用程序項目:https://dl-web.dropbox.com/get/Photos/web/wcfserviceapp.png?w=44e8c6ed

這你可以在解決方案中運行該服務,然後從解決方案中運行winforms應用程序,然後進入菜單「Debug/Attach to process ...」「並查找服務URL和端口:https://dl-web.dropbox.com/get/Photos/web/debugattachtoprocess.png?w=8c917c28

我希望這可以幫助,如果不是請詳細說明有你們有什麼樣的項目更清晰的概念,怎麼會是你的解決方案和其他有用的信息