【问题标题】:Unable to debug WCF service message无法调试 WCF 服务消息
【发布时间】:2008-11-24 19:44:57
【问题描述】:

我有一个带有 WCF 服务和客户端的 Visual Studio 2008 解决方案。

当我运行我的客户端并从我的服务调用一个方法时,我收到一条消息“无法自动调试 'Home.Service'。无法调试远程过程。这通常表明调试尚未启用服务器。”

我用谷歌搜索了一下,并尝试了以下方法。

<system.web>
   <compilation debug="true" />
</system.web>

已在客户端和服务器的 app.config 中添加。

我还确保项目是在调试模式下编译的。

还有什么可能导致此消息?

编辑:根据反馈问题添加了更多信息

  • 它正在使用 wsHttpBinding
  • 我已经设置了

    <serviceDebug includeExceptionDetailInFaults="true"/>
    
  • 我正在使用

    var service = new HomeReference.HomeServiceClient();
    service.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
    

不幸的是,当我第一次在我的服务上调用方法时,错误就会出现。我可以关闭消息框,应用程序继续工作。但是,服务器上抛出的任何异常都不会传播回客户端(我认为应该如此?)

【问题讨论】:

  • 当您尝试调试 WCF 服务时,您使用的是什么类型的绑定?
  • 我没有对Binding做任何改动,设置为wsHttpBinding。
  • 您如何托管您的 WCF 服务?
  • 您可能还想根据问题查看跟踪:msdn.microsoft.com/en-us/library/ms733025.aspx

标签: visual-studio-2008 wcf


【解决方案1】:

我与这个完全相同的错误斗争了一个多小时,结果发现我重新启动了 VS2008,它神奇地自行修复了。试一试,因为它可能会为您节省一些时间。

【讨论】:

  • 经过数小时的谷歌搜索/stackoverflowing 后,这为我解决了问题
  • 这也为我解决了这个问题(我也花了大约一个小时试图了解 WTF 正在发生..)
  • 这里也一样!而且追踪肯定没有显示任何警告或错误
  • 这也对我有用。我注意到在重新启动之前,输出窗口中报告了一个奇怪的IOException,并且在重新启动后它就消失了。我猜是什么原因导致了IOException,然后让VS2010想要调试它,但它不能——可能是出于同样的原因,它首先发生了。奇数。
  • 我想了解为什么这些问题在多年的错误报告之后仍然存在。第一份报告是在 2008 年!也许让我感到羞耻的是,我仍然需要为我的客户开发 VS2010。
【解决方案2】:

在我的情况下,问题原来是客户端和服务器上的安全设置不匹配。我正在使用这样的自定义绑定:

<customBinding>
    <binding name="AuthorisedBinaryHttpsBinding" receiveTimeout="00:03:00" sendTimeout="00:03:00">
      <!-- this next element caused the problem: -->
      <security authenticationMode="UserNameOverTransport">
      </security>
      <binaryMessageEncoding>
        <readerQuotas maxDepth="100" maxStringContentLength="1000000"
          maxArrayLength="655360000" />
      </binaryMessageEncoding>
      <httpsTransport />
    </binding>
  </customBinding>

当我删除上面突出显示的安全元素时,“无法自动调试”消息的问题消失了。

为了解决问题,我首先打开了WCF tracing。这表明 WCF 正在抛出 MessageSecurityException

安全处理器无法找到 消息中的安全标头。这 可能是因为消息是 不安全的故障或因为有 之间的绑定不匹配 沟通方。这个可以 如果服务配置为 安全性和客户端未使用 安全。

这让我看看客户端的绑定设置。事实证明,我没有将所需的安全元素添加到那里的自定义绑定中。由于我是通过代码执行此操作的,因此我需要以下内容(注意第 3 行):

  var binding = new CustomBinding(
      binaryEncoding,
      SecurityBindingElement.CreateUserNameOverTransportBindingElement(),
      new HttpsTransportBindingElement { MaxReceivedMessageSize = MaxMessageSize, });

至于 Visual Studio 显示该错误的原因,我不知道 - 在我看来这是一个错误。

【讨论】:

  • 我不会将此作为答案发布,因为它不是,但经过数小时的工作获得在两台不同机器上打开和编译的解决方案后,一个得到这个错误,另一个没有。这不是配置不匹配。这个 WCF 的东西很好,但还没有完成或成熟。
  • 微软所做的事情还没有完成或成熟?我确定这是不可能的
  • 您是否删除了客户端或服务器的安全性?
【解决方案3】:

自动附加到服务有以下限制:

  • 该服务必须是您正在调试的 Visual Studio 解决方案的一部分。

  • 必须托管服务。它可能是网站项目(文件系统和 HTTP)、Web 应用程序项目(文件系统和 HTTP)或 WCF 服务库项目的一部分。 WCF 服务库项目可以是服务库或工作流服务库。

  • 服务必须从 WCF 客户端调用。

  • 必须使用 app.config 或 Web.config 文件中的以下代码启用调试:

    <system.web>
      <compilation debug="true" />
    </system.web>
    

Limitations on WCF Debugging

此外,如果两个项目(客户端和服务)在同一个解决方案中,但将在不同的进程中运行(例如,如果您使用本地 IIS 服务器进行开发并在 不同的应用程序池而不是它使用的服务),您可能需要为解决方案启用“多个启动项目”(在解决方案属性 -> 启动项目上),以便调试器可以附加到两者.

为避免每次调试时都显示服务浏览器窗口,您可以将“开始操作”(在服务项目属性上)设置为“不打开页面。等待来自外部应用程序的请求。”

这是个人经验,可能对其他人有所帮助。

【讨论】:

    【解决方案4】:

    您可能会看到此错误的另一个原因(我相信对我来说就是这种情况)是您在 64 位 Windows 中运行。显然 Visual Studio 没有任何 x64 调试器支持。

    您可以通过更改消费应用程序的平台目标来解决此问题:

    项目属性 -> 构建 -> 将“平台目标”更改为“x86”。

    不幸的是,这对我不起作用,因为我正在尝试在 Windows Azure Development AppFabric 中运行,这似乎要求一切都以 64 位模式运行!

    【讨论】:

    • Visual Studio 从 VS2005 开始就支持 x64 调试器,所以我不认为这本身就是问题
    • 是的,我认为这一定是 Azure SDK 的红鲱鱼。我不记得导致我发布上述内容的确切问题或错误。哦,好吧 - 为误导性信息道歉。
    • @SamuelJack 虽然 VS 确实可以调试 x64 应用程序,但由于某种原因,如果客户端应用程序使用 x64,则 WCF 服务自动附加功能不起作用。但是我认为将调试版本设置为使用“x86”没有问题,而发布版本仍然保留在 AnyCPU 上。使用 VS2010 + WPF 的人甚至不会遇到这个问题,因为这些应用程序将自动为 x86。
    【解决方案5】:

    我也遇到了同样的问题。我更改了客户端和服务配置文件,例如

    编译调试设置为真。

    这对我有用。

    【讨论】:

      【解决方案6】:

      你试过了吗

          <serviceBehaviors>
      
        <serviceDebug includeExceptionDetailInFaults="true"/>
                  </behavior>
              </serviceBehaviors>
      

      出于调试目的?

      编辑:没关系,我想我误解了这个问题

      【讨论】:

      • 是的,我实际上已将其设置为 True。忘了提那个。我认为它只需要在服务器端 app.config 上,因为它不包含在客户端 app.config 中。
      【解决方案7】:

      我也遇到过类似的问题,原来是因为在 IIS 站点/虚拟目录上没有启用 Windows 身份验证。

      您是否尝试过将身份验证模式设置为集成而不是匿名? http://msdn.microsoft.com/en-us/library/x8a5axew(VS.80).aspx

      【讨论】:

        【解决方案8】:

        在您的网络服务 web.config 中确保编译调试设置为 true。 这应该可以解决您的问题!

        【讨论】:

          【解决方案9】:

          在我的情况下,问题原来是完全不同的。我更改了 Web 服务上的操作名称,忘记更新客户端。由于某种原因,这导致了“无法自动调试...”错误。

          【讨论】:

            【解决方案10】:

            也可以是 IISExpress 和 IIS 使用相同的端口号。如果您在 Visual Studio 和 IISExpress 中开发 WCF 应用程序,然后在本地 IIS 上安装相同的应用程序,请确保不要在 IIS 和 IISExpress 中使用相同的端口号。使用相同的端口号会导致此错误消息。

            【讨论】:

              【解决方案11】:

              我在 Visual Studio 2017 中遇到了同样的问题。删除解决方案文件夹根目录中隐藏的 .vs 文件夹后,我能够再次调试。

              【讨论】:

                【解决方案12】:

                在客户端中创建服务引用后添加这行代码。

                MyWCFService.IService _proxy = new MyWCFService.IService();
                _proxy.ClientCredentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;
                

                【讨论】:

                • 抱歉,这也没用。
                • OP 发布的问题不依赖于 ClientCredential 设置。如果开发人员使用证书凭据怎么办......在这种情况下,上述内容将如何帮助???
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2017-02-08
                • 2012-02-29
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-12-08
                相关资源
                最近更新 更多