我已经使用VStudio.net 2003分配了一个用VB编写的Web应用程序。我正在尝试在我的localhost(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".
当我尝试调用我的实际Web方法的代理类F11(stepInto)时会发生这种情况。
症状2:在将要调用的语句中的.asmx文件代码中预先设置断点不起作用(即调试器根本不会停止)。
描述了这种情况后,我的VStudio解决方案配置如下:
Service1 - 从VB - WEB - ASP.NET Web服务应用程序模板创建的项目;这个Service1项目包含我想调试的主要.asmx源代码。此项目的Web.config包含编译defaultLanguage =“vb”debug =“true”
ProxyService1 - 从Windows创建的单独项目 - [VB]类库模板;这里删除了form1.vb文件;我访问了“添加服务参考” - >发现(解决方案中的服务),然后在“兼容性”部分中单击“添加Web引用”。然后选择上面的Service1,我为它分配了WSservice1的“Web引用名称”。这会产生一个Reference.VB文件,当我在项目bin \ Debug文件夹中构建一个同名的.DLL时,我会生成一个ProxyService1类;这个项目有一个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)
如果我右上方/去上面的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
为了完整性,这里是Service1项目的.asmx文件中的相应webmethod:
<WebMethod(MessageName:="Get Message By Type")> _
Public Function GetMessageByType(ByVal iMsgType As Integer) As DataSet
con = New SqlConnection(sConnZipeee)
con.Open()
IIS中的每个位置我都知道要检查并在项目属性中检查了要检查或设置的正确调试设置。我已经调试了其他像这样设置的东西,但我真的被我错过了这个“解决方案”。
答案 0 :(得分:1)
当我调试webservices时,我通常会在项目属性的Web部分(more info here)中选择“不要打开页面。等待来自外部应用程序的请求”选项。我通常也会在2个VS实例中运行该项目,一个用于Web服务,一个用于客户端。我可以在网络服务中放置断点,所有内容都会点击,我可以看到发生了什么。
答案 1 :(得分:1)
有关信息 - 如果您已经了解如何从VS2008 / .NET3.5应用程序调试.NET4 Web服务,则需要在VS2010中启动该服务,在服务中设置断点,然后运行您的应用程序从VS2008正常。破发点将被击中。
如果不在VS2010中运行该服务,您将收到上述John所描述的错误。
答案 2 :(得分:0)
尝试在运行aspnet_wp.exe进程时附加调试器
答案 3 :(得分:0)
我通常在类库中调试逻辑,我可以从控制台应用程序开始调试。如果您必须作为服务进行调试,This link也会很有用。