我有一个带有WCF服务和客户端的Visual Studio 2008解决方案。
当我运行我的客户端,并从我的服务中调用一个方法时,我收到一条消息“无法自动调试'Home.Service'。远程过程无法调试。这通常表示调试尚未启用服务器。“
我已经google了一下,并尝试了以下内容。
<system.web>
<compilation debug="true" />
</system.web>
已添加到客户端和服务器上的app.config中。
我还确保在调试模式下编译项目。
还有什么可能导致此消息?
编辑:根据反馈问题添加了更多信息
我已经设置了
<serviceDebug includeExceptionDetailInFaults="true"/>
我正在使用
var service = new HomeReference.HomeServiceClient();
service.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
不幸的是,第一次在我的服务上调用方法时出现错误。我可以关闭消息框,应用程序继续工作。服务器上抛出的任何异常虽然没有传播回客户端(我认为它应该?)
答案 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;