调试 IIS Express Web 服务/silverlight 应用程序时出现安全错误
Posted
技术标签:
【中文标题】调试 IIS Express Web 服务/silverlight 应用程序时出现安全错误【英文标题】:Security error when debugging IIS Express web service / silverlight application 【发布时间】:2012-11-21 22:24:22 【问题描述】:我有一个托管在 asp.net Web 应用程序上的 silverlight 应用程序,包括 WCF SOAP Web 服务。该应用程序正在使用 SSL 的 HTTPS://... 链接下运行。当我将它部署在运行 IIS 7.5 的测试服务器上时,一切正常且符合预期。 我还有第二个 Web 应用程序,包括一个 RESTful WCF 服务,该服务使用 SSL 在我的本地机器和提到的测试服务器上运行(但在这种情况下没有 silverlight 客户端)。
我的问题是 Silverlight 客户端在应该进行反序列化的部分从 SOAP 服务获取响应时收到安全错误,但仅在我的本地计算机上。
return base.Channel.EndGet...(IAsyncResult) // <-- exception reported here:
System.ServiceModel.CommunicationException:发生错误时
试图向 URI 'https://localmachinename.domain.com:8000/Service.svc' 发出请求。
这可能是由于尝试以跨域方式访问服务而没有
适当的跨域策略,或不适合 SOAP 服务的策略。
您可能需要联系服务所有者发布跨域策略文件
并确保它允许发送与 SOAP 相关的 HTTP 标头。这个错误也可能是
由在 Web 服务代理中使用内部类型而不使用
InternalsVisibleToAttribute 属性。请参阅内部异常了解更多信息
细节。 ---> System.Security.SecurityException --->
System.Security.SecurityException:安全错误。
在 System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
在 System.Net.Browser.BrowserHttpWebRequest.c__DisplayClassa.b__9(对象 sendState)
在 System.Net.Browser.AsyncHelper.c__DisplayClass4.b__0(对象 sendState)
--- 内部异常堆栈跟踪结束 ---
在 System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,对象状态)
在 System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult 结果)
--- 内部异常堆栈跟踪结束 ---
在 System.ServiceModel.Channels.Remoting.RealProxy.Invoke(Object[] args)
在 proxy_2.EndGetTypes(IAsyncResult)
在 NameSpace.ClientClass.ServiceContractInterfaceImplementation.EndGetTypes(IAsyncResult 结果)
我的 SOAP 服务的 clientaccesspolicy.xml 如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="SOAPAction">
<domain uri="*" />
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
任何提示我做错了什么? 部署的应用程序在我们的测试网络服务器上运行良好。
2012 年 12 月 6 日:问题仍然存在。一些更新/更多信息: Web 服务使用 Windows 身份验证和模拟。测试服务器和本地机器之间的唯一区别是应用程序池以不同的身份运行,这两种身份都是技术域用户。我发现的唯一区别是我本地计算机上的用户未在 Active Directory 中授予“受信任的委派”标志。所以我认为这可能是一个 Kerberos 问题。但是,当我运行我的宁静 WCF 服务和客户端时,这从来都不是问题。此外,使用 SOAP 服务的 Windows 窗体客户端,一切都在我的本地机器上运行良好,并且可以按预期进行开发/调试。 所以它必须是一个 Silverlight 问题。 我没有得到的是,假设这个可怕的安全错误是由跨域策略问题引起的,就像在大多数情况下那样,这些域在哪里交叉?一切都应该在本地机器上进行,没有调用其他服务。这不应该使用 IIS Express 发生,不是吗? 有人能帮忙吗?
【问题讨论】:
【参考方案1】:clientaccesspolicy.xml 应该放在 wwroot 文件夹中,并且还包括crossdomain.xml
【讨论】:
我尝试在应用程序根目录中添加一个额外的 crossdomain.xml,但无济于事。 我什至会绝望地把两者都放在 wwwroot 中,但我很不确定它会在哪里运行 IIS Express...【参考方案2】:如果您在解决方案中有多个启动项目,请确保您正在运行您的服务和正确的 Silverlight 项目。我有两个 silverlight 项目,并且开始了一个不包含 clientaccesspolicy.xml 的错误项目。
【讨论】:
以上是关于调试 IIS Express Web 服务/silverlight 应用程序时出现安全错误的主要内容,如果未能解决你的问题,请参考以下文章
VS2015调试时没有启动IIS Express Web服务器
关于VS调试Web 无法启动IIS Express Web 服务器的问题解决
小5聊VS运行调试报错无法连接到Web服务器IIS Express
Visual Studio 2012 Express:如何使用自定义 Web 服务器进行调试