2009-05-19 91 views
1

我已經分配了一個使用VStudio.net 2003在VB中編寫的Web應用程序。我試圖在本地主機上配置源代碼(VStudio 2008),以便我可以探索和學習關於當前的應用程序(在開始任何實際的更改之前),我無法調試Web服務項目的工作。無法在Visual Studio 2008中調試Web服務項目

症狀1:

"Unable to automatically step into the server. The remote procedure could not be debugged. 
    This usually indicates that debugging has not been enabled on the server. 
    See help for more information". 

發生這種情況時,我嘗試F11(stepInto)代理類調用我的實際Web方法。

症狀2:在將被調用的語句中在我的.asmx文件代碼中預先設置斷點不起作用(即調試器不會停止)。

已經說明了情況,這是我VStudio解決方案是如何配置:

服務1 - WEB - - 從VB創建的項目ASP.NET Web服務應用程序模板;這個Service1項目包含我想要調試的主要.asmx源代碼。該項目的Web.config包含編譯defaultLanguage =「vb」debug =「true」

ProxyService1 - 從Windows - [VB]類庫模板創建的單獨項目;這裏form1.vb文件被刪除;我訪問了「添加服務引用」 - > Discover(解決方案中的服務),然後在「兼容性」部分點擊「添加Web引用」。然後選擇上面的Service1,我將它分配給WSservice1的「Web引用名稱」。這導致了一個Reference.VB文件,並且當我在項目bin \ Debug文件夾中生成ProxyService1類.DLL同名時,這個項目有一個帶編譯的App.Config文件defaultLanguage =「vb」debug =「true」

Project1 - 調用webservice的.aspx和.vb文件的主UI項目; project1具有對ProxyService1.DLL的引用;該項目的Web.config包含編譯defaultLanguage =「vb」debug =「true」。我在這個項目稱爲message.vb看起來大致是這樣到達一個斷點在文件中的一個:

Public Class Message 
Dim wsZipeee As New ProxyService1.WSservice1.myService 
Dim dsMessage As DataSet 
Public Function GetMessageByType(ByVal iMsgType As Integer) As DataSet 
    dsMessage = wsZipeee.GetMessageByType(iMsgType) 

如果我RIGHTMOUSE /去定義上面的語句,這裏是Reference.vb代碼在我ProxyService1項目:

<System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/ZipeeeWebService/Zipeee/Get Message By Type", RequestElementName:="Get Message By Type", RequestNamespace:="http://tempuri.org/ZipeeeWebService/Zipeee", ResponseElementName:="Get Message By TypeResponse", ResponseNamespace:="http://tempuri.org/ZipeeeWebService/Zipeee", Use:=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle:=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)> _ 
    Public Function GetMessageByType(ByVal iMsgType As Integer) As <System.Xml.Serialization.XmlElementAttribute("Get Message By TypeResult")> System.Data.DataSet 
     Dim results() As Object = Me.Invoke("GetMessageByType", New Object() {iMsgType}) 
     Return CType(results(0),System.Data.DataSet) 
    End Function 

爲了完整起見,這裏是在服務1項目的.asmx文件對應的WebMethod:

<WebMethod(MessageName:="Get Message By Type")> _ 
Public Function GetMessageByType(ByVal iMsgType As Integer) As DataSet 
    con = New SqlConnection(sConnZipeee) 
    con.Open() 

Everyplace的IIS中我知道檢查並檢查項目屬性,我檢查了適當的調試設置以進行檢查或設置。我已經調試了其他這樣設置的東西,但是我真的被卡在我錯過了這個「解決方案」上。

回答

0

當我調試web服務時,我通常在我的屬性中將它們設置爲「等待來自外部應用程序的請求」。我通常還會在VS的兩個實例中運行該項目,一個用於webservice,一個用於客戶端。我可以在Web服務中插入斷點,並且所有命令都可以打開,我可以看到發生了什麼。

+0

好的,我注意到web服務的屬性中的單選按鈕(從未見過這個)並選中它。不完全確定你如何做你的方法:(1)在我的3個項目中啓動VS,然後F5在UI項目中的斷點處停止,然後調用webservice(2)以.asmx代碼啓動相同的3個項目和斷點(這種方法無法像上面那樣停止)。 或者,我有一個VS和我的鼠標右鍵在UI項目的實例,然後調試 - >啓動新的實例爲每個項目需要調試。如果這就是你的意思,那也不適合我。 – 2009-05-19 20:11:12

+0

我運行了兩個VS實例...每個運行調試,但一個開始與webservice項目和一個與客戶端項目。 – CSharpAtl 2009-05-19 20:48:00

+0

你可以讓你的VS實例調試web服務,就像我所描述的那樣,並且只要客戶端代碼連接到它就可以了....如果是在調試中,則無關緊要,除非你也在調試客戶端。 – CSharpAtl 2009-05-19 20:52:39

0

嘗試連接上運行ASPNET_WP.EXE過程

0

我通常把邏輯的類庫,我可以調試一個控制檯應用程序開始調試調試器。如果您必須作爲服務調試,則This link也會很有用。

1

如需瞭解如何從VS2008/.NET3.5應用程序調試.NET4 Web服務,您需要在VS2010中啓動服務,在服務中設置一箇中斷點,然後運行正常情況下,VS2008的應用程序。中斷點將被擊中。

沒有在VS2010中運行服務,你會得到上面John所描述的錯誤。

相關問題