我已经在1.0.1.0和1.0.4.0中下载了recaptcha.dll。 尝试渲染控件时,我得到以下异常:
安全例外 说明:应用程序尝试执行安全策略不允许的操作。要授予此应用程序所需的权限,请与系统管理员联系或在配置文件中更改应用程序的信任级别。
异常详细信息:System.Security.SecurityException:请求类型为'System.Web.AspNetHostingPermission,System,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的权限失败。
堆栈跟踪:[SecurityException:请求类型'System.Web.AspNetHostingPermission,System,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的权限失败。 System.Reflection.Assembly._GetType(String name,Boolean throwOnError,Boolean ignoreCase)+0 System.Web.UI.NamespaceTagNameToTypeMapper.GetControlType(String tagName,IDictionary attribs,Boolean throwOnError)+209
快速谷歌搜索提供的解决方案是使用caspol.exe为recaptcha.dll程序集添加完全信任。
C:\%path%\ caspol -af C:\ inetpub \ wwwroot \%path%\ bin \ recaptcha.dll
此时,我收到以下错误:
错误:此程序集不是强名称
如果没有下载源代码并在本地重新编译,还有其他方法可以让它工作吗?
答案 0 :(得分:3)
我遇到了同样的问题,你的解决方案帮助了我。我还必须在reCAPTCHA ASP.NET源代码上执行以下步骤。
1)打开DLL项目的AssemblyInfo.cs文件,并添加以下using语句。
使用System.Security;
2)将以下行添加到AssembleInfo.cs。
[assembly:AllowPartiallyTrustedCallers()]
3)重新安装dll并重新部署您的项目。应该解决这个错误。
注意:我正在使用的网站是使用1and1.com作为他们的托管公司。我还必须在代码隐藏中设置Proxy属性,以避免在HttpWebRequest期间发生超时异常。
recaptcha.Proxy = new WebProxy("http://ntproxyus.lxa.perfora.net:3128");
希望这对某人有所帮助,但现在我已经在1and1.com上托管的ASP.NET网站上运行了reCAPTCHA。
答案 1 :(得分:2)
我有同样的问题。经过一番争吵后,我意识到我已从zip文件中下载了recaptcha.dll。所以,我右键单击了dll,转到属性并单击了取消阻止按钮。
这解决了我的问题。
答案 2 :(得分:1)
我尝试在hostmysite.com上的共享托管环境中将Google的reCAPTCHA部署到我们的生产服务器时遇到了两个不同的安全问题
1)首先,我根本无法显示表格。相反,我会看到一条错误消息,上面写着“该程序集不允许部分信任的调用者”。通过下载一个有人从源代码重新编译的DLL并添加[assembly:AllowPartiallyTrustedCallers]来解决这个问题。 DLL下载和更多细节在这里: https://code.google.com/p/recaptcha/issues/detail?id=100
2)部署该DLL后,我能够将reCAPTCHA最初显示在表单上,但提交表单导致原始帖子中列出了相同的安全错误:
“说明:应用程序尝试执行安全策略不允许的操作。要授予此应用程序所需的权限,请与系统管理员联系或在配置文件中更改应用程序的信任级别。”
我向我们的托管支持提交了一张票,他们能够解决这个问题,并提供了以下解释:
“它可能在您的计算机上运行,因为您已将其设置为完全信任环境,而该站点所在的Web服务器设置为中等信任。因此它具有一组受限制的可信URI。我现在已添加Google的Recaptcha到受信任列表的URI,您的表单正在该网站上运行。如果您还有其他任何问题,请告诉我们。“
答案 3 :(得分:0)
无法使用可供下载的无符号dll使其工作,我掌握了源代码,自行编译和签名,这样可以正常工作。
如果在某个地方的某些地方表明我可能不得不这样做,那就太好了......
答案 4 :(得分:0)
在IIS中转到应用程序池,进入您的项目,右键单击并选择高级属性并将LoadUserProfile设置为True。