无法调试wcf-windows服务

时间:2010-11-08 07:20:21

标签: c# wcf

我们的应用程序访问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>

5 个答案:

答案 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没有加载符号。