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