2009-05-19 92 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所描述的错误。

相关问题