无法调试WCF服务消息

时间:2008-11-24 19:44:58

标签: visual-studio-2008 wcf

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

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

我已经google了一下,并尝试了以下内容。

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

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

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

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

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

  • 使用wsHttpBinding
  • 我已经设置了

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

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

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

12 个答案:

答案 0 :(得分:39)

我正在用这个完全相同的错误战斗超过一个小时而且很低,看到我重新启动VS2008并且它神奇地修复了自己。试一试,因为它可能会节省你一些时间。

答案 1 :(得分:13)

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

<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

  

安全处理器无法找到   消息中的安全标头。这个   可能是因为消息是一个   无担保的错误或因为有一个   结合不匹配   沟通各方。这个可以   如果配置了服务,则会发生   安全性和客户端没有使用   安全

这指向我查看客户端的Binding设置。原来,我没有在我的自定义绑定中添加所需的安全元素。由于我是通过代码执行此操作,因此我需要以下内容(请注意第3行):

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

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

答案 2 :(得分:8)

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

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

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

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

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

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

请参阅Limitations on WCF Debugging

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

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

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

答案 3 :(得分:6)

你可能会看到这个错误的另一个原因(我相信是我的情况)是你在64位Windows上运行。显然,Visual Studio没有任何x64调试器支持。

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

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

不幸的是,这对我不起作用,因为我正试图在Windows Azure开发AppFabric中运行,这似乎要求所有内容都以64位模式运行!

答案 4 :(得分:1)

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

编译调试设置为true。

这对我有用。

答案 5 :(得分:0)

你试过吗

    <serviceBehaviors>

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

出于调试目的?

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

答案 6 :(得分:0)

我遇到了类似的问题,原因是IIS网站/虚拟目录未启用Windows身份验证。

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

答案 11 :(得分:-1)

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

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