WCF:指定的注册表项在 base.Channel 调用中不存在

Posted

技术标签:

【中文标题】WCF:指定的注册表项在 base.Channel 调用中不存在【英文标题】:WCF: The specified registry key does not exist in base.Channel call 【发布时间】:2013-01-04 02:53:31 【问题描述】:

执行以下 WCF 代码时出现错误:“指定的注册表项不存在”:

return base.Channel.GetRateSheet(request);

这是使用 this 的其余方法:

public GetRateSheetResponse GetRateSheet(GetRateSheetRequest request)

    return base.Channel.GetRateSheet(request);
 

此端点的配置是:

<endpoint address="http://*********/*******/Service.svc"
          binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IBusinessService"
          name="Endpoint_RateSheetService"
          contract="*********.RateSheetService" />

这段代码曾经工作了好几个星期,今天早上开始抛出这个错误。

没有内部异常,我得到的唯一堆栈跟踪是:

at Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode, String str)

我做了所有常见的轮胎踢:重新启动VS,重新启动机器,获得最新版本的源代码。

运行 XP 32 位。

[编辑:] 当我转到解决方案的 bin 文件夹并直接运行可执行文件时,它可以工作 - 没有错误。该错误仅在从 Visual Studio 运行时发生

【问题讨论】:

当你说你有最新版本时,你是在谈论 .NET 4.5 吗? 不,源代码控制的源代码版本。谢谢。 最近有 OS 或 VS 更新吗? 周末好像有一次操作系统更新——我旁边的人说他的电脑重新启动了。操作系统更新相当合理。 【参考方案1】:

似乎人们在为 .NET Framework 安装安全补丁后遇到了similar issues:MS12-074: Vulnerabilities in .NET Framework could allow remote code execution: November 13, 2012

你可以ask microsoft to fix it here

解决方法 - 添加以下注册表项:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"LegacyWPADSupport"=dword:00000000

对于 64 位机器

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework]
"LegacyWPADSupport"=dword:00000000 

【讨论】:

是的,但前提是它是在安装特定安全补丁后出现的。【参考方案2】:

我今天在调试某些东西时遇到了这个问题。如果您在 VS 的调试设置中选中“仅我的代码”选项,异常就会消失。

【讨论】:

【参考方案3】:

转到 --> Debug-->Exceptions 并取消选中“Common Language Runtime Exceptions”

这应该可以解决问题。

【讨论】:

以上是关于WCF:指定的注册表项在 base.Channel 调用中不存在的主要内容,如果未能解决你的问题,请参考以下文章

怎么制作注册表启动项

在 Unity Container 中注册 WCF 服务

如何为 WCF 指定自定义 SoapAction

wcf 客户端调用服务端方法和rpc注册中心

WCF端点地址,指定地址后默认仍然可用

WCF 上的 CORS - 为啥在请求来自客户端机器时指定 Web 服务器?