c# - 无法调试 wcf-windows 服务

标签 c# wcf

我们的应用程序访问 WCF 服务,该服务由单台计算机上的 Windows 服务托管。客户端应用程序和服务始终位于同一台计算机上。

我创建了一个托管 WCF 服务的 Windows 服务。为了测试我的 Windows 服务代码,我创建了一个控制台应用程序,其中包含与我的 Windows 服务相同的 app.config 和代码。我在一个调试线程中启动控制台应用程序,并在另一个调试线程中启动我的客户端。一切正常,我可以轻松使用调试器。

现在擦...

因此,我创建了一个安装程序并安装了我的 Windows 服务。成功启动后,我使用 http://localhost/VssService 成功将服务引用添加到我的客户端在 Visual Studio 2010 中。我通过“附加到进程”成功附加到服务。我在调试线程中启动了我的客户端,但是当我尝试进入远程方法时,我得到“无法自动进入服务器。调试器无法在服务器进程中停止。” [NetNamedPipeBinding_IVssService] 和 [BasicHttpBinding_IVssService] 都会发生这种情况。我已经为此苦苦挣扎了几个小时并且已经没有想法了,所以我希望你能帮助我。我已经包含了我的 Windows 服务和客户端应用程序的 app.config 文件。希望他们能提供帮助。

感谢您花时间阅读这个问题,希望您能帮助解决这个问题...

迈克

===================== SERVICE 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>

最佳答案

好的。当 VS 调试停止工作时,我使用的一种方法是将 System.Diagnostics.Debugger.Break() 放在服务代码(例如,构造函数或方法)中的方便位置。这会导致 JIT 调试器启动,并允许我使用我拥有的任何 VS 实例连接到当时损坏的代码的服务。

很明显,您已将其从非调试代码中删除。

关于c# - 无法调试 wcf-windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4121943/

相关文章:

c# - 如何在不导致循环引用的情况下将 LazyLoading 与 WCF 一起使用?

.net - 使用我的本地 SSL 证书配置端口

c# - 我该如何解决这种歧义?

c# - 如何使用 JavaScript 验证 GridView 内的下拉菜单

c# - Cake MSBuild 设置属性

c# - 如何使用变量作为类型

WCF - 使用带有 net.tcp 绑定(bind)的 WS-Compression 未关闭套接字连接

c# - 使用特定用户帐户运行 Windows 应用程序

Page_Load 中的 C# 将代码放在 <html> 之上

c# - 使用 Silverlight/IIS 的双工轮询的可扩展性