Vb.net 无法在Visual Studio 2008中调试web服务项目

Vb.net 无法在Visual Studio 2008中调试web服务项目,vb.net,visual-studio,web-services,debugging,Vb.net,Visual Studio,Web Services,Debugging,我被分配了一个使用VStudio.NET2003用VB编写的web应用程序。我正在尝试在本地主机(VStudio 2008)上配置源代码,以便能够探索和了解当前应用程序(在开始任何真正的更改之前),并且无法对web服务项目进行调试 症状1: "Unable to automatically step into the server. The remote procedure could not be debugged. This usually indicates that debugg

我被分配了一个使用VStudio.NET2003用VB编写的web应用程序。我正在尝试在本地主机(VStudio 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(单步进入)调用实际web方法的代理类时,就会发生这种情况

症状2:在将要调用的语句的.asmx文件代码中预先设置断点不起作用(即调试器根本不停止)

在描述了这种情况之后,下面是如何配置我的VStudio解决方案:

Service1-从VB-WEB-ASP.NET WEB服务应用程序模板创建的项目;此Service1项目包含我要调试的main.asmx源代码。此项目的Web.config包含编译defaultLanguage=“vb”debug=“true”

ProxyService1-从Windows-[VB]类库模板创建的单独项目;此处删除了form1.vb文件;我访问了“添加服务引用”->Discover(解决方案中的服务),然后在“兼容性”部分单击“添加Web引用”。然后选择上面的Service1,我给它分配一个WSservice1的“web引用名称”。这将导致一个Reference.VB文件,当我在projects bin\Debug文件夹中构建同名的ProxyService1 class a.DLL时;此项目有一个编译为defaultLanguage=“vb”debug=“true”的App.Config文件

Project1-主UI项目,包含调用Web服务的.aspx和.vb文件;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)
如果我在上面的stmt上单击鼠标右键/转到定义,以下是ProxyService1项目中Reference.vb中的代码:

    <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
<WebMethod(MessageName:="Get Message By Type")> _
 Public Function GetMessageByType(ByVal iMsgType As Integer) As DataSet
    con = New SqlConnection(sConnZipeee)
    con.Open()
_
作为System.Data.DataSet的公共函数GetMessageByType(ByVal iMsgType为整数)
Dim results()作为Object=Me.Invoke(“GetMessageByType”,新对象(){iMsgType})
返回CType(结果(0),System.Data.DataSet)
端函数
为完整起见,以下是Service1项目的.asmx文件中相应的webmethod:

    <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
<WebMethod(MessageName:="Get Message By Type")> _
 Public Function GetMessageByType(ByVal iMsgType As Integer) As DataSet
    con = New SqlConnection(sConnZipeee)
    con.Open()
_
作为数据集的公共函数GetMessageByType(ByVal iMsgType为整数)
con=新的SqlConnection(sConnZipeee)
con.Open()

在我知道要检查的IIS中的每个地方,以及在我已检查的项目属性中,检查或设置正确的调试设置。我调试过其他类似的设置,但我真的被困在了这个“解决方案”中我错过的东西上。

当我调试Web服务时,我通常在我的项目属性()的Web部分选择“不要打开页面。等待外部应用程序的请求”。我还通常在两个VS实例中运行该项目,一个用于webservice,一个用于client。我可以在Web服务中放置断点,然后所有内容都会命中,我可以看到发生了什么。

尝试在运行aspnet_wp.exe进程时附加调试器

我通常将要调试的逻辑放在类库中,我可以从控制台应用程序开始调试。如果您必须作为服务进行调试,这也将非常有用

有关信息-如果您在这里了解如何从VS2008/.NET3.5应用程序调试.NET4 web服务,则需要在VS2010中启动该服务,在该服务中设置断点,然后从VS2008正常运行应用程序。突破点将被击中


如果不在VS2010中运行该服务,您将得到上面John描述的错误。

好的,我注意到web服务属性中的单选按钮(以前从未看到过)并选中了它。不太清楚您是如何执行此方法的:(1)使用其中的3个项目启动VS,然后在调用webservice之前在UI项目的断点处停止F5;(2)使用相同的3个项目和.asmx代码中的断点启动VS(此方法无法以与上面相同的方式停止)。或者,我有一个VS实例,我在UI项目上右键单击,然后调试->为每个需要调试的项目启动新实例。如果这是你的意思,那对我也不起作用。我运行了两个VS实例…每个都在运行调试,但一个是从webservice项目开始的,另一个是从client项目开始的。你可以让你的VS实例调试webservice,就像我描述的那样,然后让客户端代码连接到它…不管它是否在调试中,除非你也在调试客户端。不知道你的意思。我单击“调试”,然后单击“附加到进程”。我看到一个复杂的对话框,我不知道该做什么选择。从可用进程中,我是否选择:aspnet_wp.exe devenv.exe vsjitdebugger.exe在选择其中一个(或其他内容)之后,然后如何继续到断点?在visual studio上打开web服务项目,然后单击调试->附加到进程,在显示的对话框中,选择aspnet_wp.exe,然后单击附加按钮。当您请求web服务时,如果您有断点,它们将被执行对不起,仍然不清楚(与我在这里看到的不匹配…)。我有3个项目;不清楚如何开始。除非启动.aspx web应用程序,否则没有名为aspnet_wp.exe的进程。然而,当我启动它,然后转到Debug/'attachtoprocess'时,条目会变灰(禁用),并且“Attach”按钮也会变灰。但是,我无法使调试器在我的webservice项目中.asmx文件的断点stmt处停止。注意:上面的链接用于调试Windows服务,而不是Web服务。