我们的应用程序访问WCF服务,该服务由单个计算机上的Windows服务托管。客户端应用程序和服务始终位于同一台计算机上。
我创建了一个托管WCF服务的Windows服务。为了测试我的Windows服务代码,我创建了一个控制台应用程序,其中包含与Windows服务相同的app.config和代码。我在一个调试线程中启动控制台应用程序,并在另一个调试线程中启动我的客户端。一切都很完美,我可以轻松使用调试器。
现在擦......
所以,我创建了一个安装程序并安装了我的Windows服务。成功启动后,我使用Visual Studio 2010中的http://localhost/VssService成功将服务引用添加到我的客户端。我通过“附加到进程”成功附加到服务。我在调试线程中启动了我的客户端,但是当我尝试进入远程方法时,我得到“无法自动进入服务器。调试器无法在服务器进程中停止。” [NetNamedPipeBinding_IVssService]和[BasicHttpBinding_IVssService]都会发生这种情况。我一直在努力工作几个小时并且已经没有想法,所以我希望你能帮助我。我已经为我的Windows服务和客户端应用程序包含了app.config文件。希望他们能提供帮助。
感谢您花时间阅读此问题并希望您可以帮助解决此问题...
麦克
=====================服务APP.CONFIG ====================== =======
<services>
<service behaviorConfiguration="VssServiceBehavior" name="ClientSaver.VssService.VssService">
<endpoint address="net.pipe://localhost/VssService/Pipe/" binding="netNamedPipeBinding"
bindingConfiguration="" contract="ClientSaver.VssService.IVssService" />
<endpoint address="http://localhost/VssService/" binding="basicHttpBinding"
bindingConfiguration="" contract="ClientSaver.VssService.IVssService" />
<endpoint address="http://localhost/VssService/MEX/" binding="mexHttpBinding"
bindingConfiguration="" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost/VssService/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="VssServiceBehavior">
<serviceMetadata httpGetEnabled="True" policyVersion="Policy15" />
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
=========================客户APP.CONFIG ================== ===========
<endpoint address="http://localhost/VssService/" binding="basicHttpBinding"
bindingConfiguration="" contract="ClientSaver.VssService.IVssService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="VssServiceBehavior">
<serviceMetadata httpGetEnabled="true" policyVersion="Policy15" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
答案 0 :(得分:3)
确定。我在VS调试停止工作时使用的一种方法是将System.Diagnostics.Debugger.Break()
放在服务代码中的一个安全位置(比如构造函数或方法)。这会导致JIT调试器启动,并允许我连接到服务,并使用我所拥有的任何VS实例在该点断开代码。
显然你从非调试代码中删除它。
答案 1 :(得分:0)
您无法跨越可执行边界。您需要在服务器代码(即项目)中设置断点。然后从服务器的项目附加到运行的Windows服务进程(在这里要小心......你需要将最新的服务器项目作为Windows服务运行)。然后,当您单步执行Windows窗体应用程序时,它将被服务器的断点捕获。
答案 2 :(得分:0)
您应该使用Internet Explorer作为默认浏览器来调试您的服务......
答案 3 :(得分:0)
查看windows的调试工具。这里有一些工具可用于调试Windows服务。
答案 4 :(得分:0)
您是否尝试手动加载调试符号?它曾经发生在我身上,而且它正在发生,因为VS没有加载符号。