我有一个带有WCF服务的Visual Studio 2008解决方案和一个客户端.
当我运行我的客户端,并从我的服务中调用一个方法时,我收到一条消息"无法自动调试'Home.Service'.远程过程无法调试.这通常表示尚未在服务器上启用调试. "
我用Google搜索过,并尝试了以下内容.
已在客户端和服务器上的app.config中添加.
我还确保项目正在调试模式下编译.
还有什么可能导致这个消息?
编辑:根据反馈问题添加更多信息
它使用wsHttpBinding
我已经设定
我在用
var service = new HomeReference.HomeServiceClient(); service.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
不幸的是,第一次在我的服务上调用方法时出现错误.我可以关闭消息框,应用程序继续工作.服务器上抛出的任何异常都没有传播回客户端(我认为它应该?)
我正在与这个完全相同的错误战斗超过一个小时而且很低,看到我重新启动VS2008并且它神奇地修复了自己.试一试,因为它可能会节省你一些时间.
在我的情况下,问题结果是客户端和服务器上的安全设置不匹配.我正在使用这样的自定义绑定:
当我删除上面突出显示的安全元素时,"无法自动调试"消息的问题就消失了.
为了解决这个问题,我首先启用了WCF跟踪.这告诉我WCF正在抛出MessageSecurityException:
安全处理器无法在消息中找到安全标头.这可能是因为消息是不安全的故障,或者因为通信方之间存在绑定不匹配.如果为安全性配置服务且客户端未使用安全性,则会发生这种情况.
这指向我查看客户端的绑定设置.原来,我没有在我的自定义绑定中添加所需的安全元素.由于我是通过代码执行此操作,因此我需要以下内容(请注意第3行):
var binding = new CustomBinding( binaryEncoding, SecurityBindingElement.CreateUserNameOverTransportBindingElement(), new HttpsTransportBindingElement { MaxReceivedMessageSize = MaxMessageSize, });
至于为什么Visual Studio显示该错误,我不知道 - 看起来我是一个错误.
自动附加到服务具有以下限制:
该服务必须是您正在调试的Visual Studio解决方案的一部分.
该服务必须托管.它可能是网站项目(文件系统和HTTP),Web应用程序项目(文件系统和HTTP)或WCF服务库项目的一部分.WCF服务库项目可以是服务库或工作流服务库.
必须从WCF客户端调用该服务.
必须使用app.config或Web.config文件中的以下代码启用调试:
请参阅WCF调试的限制
此外,如果两个项目(客户端和服务)都在同一个解决方案中,但将在不同的进程中运行(例如,如果您使用本地IIS服务器进行开发,并且在不同的应用程序池上运行Web应用程序而不是服务它消耗),您可能需要为解决方案启用" 多个启动项目 "(在解决方案属性 - >启动项目上),以便调试器可以附加到两者.
为避免每次调试时都显示服务浏览器窗口,您可以将"启动操作"(在服务项目属性上)设置为"不要打开页面.等待来自外部应用程序的请求".
这来自个人经验,可能会帮助他人.
你可能会看到这个错误的另一个原因(我相信是我的情况)是你在64位Windows上运行.显然,Visual Studio没有任何x64调试器支持.
您可以通过更改使用应用程序的平台目标来解决此问题:
项目属性 - >构建 - >将"平台目标"更改为"x86".
不幸的是,这对我不起作用,因为我正试图在Windows Azure开发AppFabric中运行,这似乎要求所有内容都以64位模式运行!