3

我在一个包含 WCF SOAP Web 服务的 asp.net Web 应用程序上托管了一个 silverlight 应用程序。该应用程序正在使用 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>

任何提示我做错了什么?部署的应用程序在我们的测试 Web 服务器上运行良好。

2012 年 12 月 6 日:问题仍然存在。一些更新/更多信息:
Web 服务使用 Windows 身份验证和模拟。测试服务器和本地机器之间的唯一区别是应用程序池以不同的身份运行,这两种身份都是技术域用户。我发现的唯一区别是我本地计算机上的用户未在 Active Directory 中授予“受信任的委派”标志。所以我认为这可能是一个 Kerberos 问题。但是,当我运行我的宁静 WCF 服务和客户端时,这从来都不是问题。此外,使用 SOAP 服务的 Windows 窗体客户端,一切都在我的本地机器上运行良好,并且可以按预期进行开发/调试。
所以它必须是一个 Silverlight 问题。
我没有得到的是,假设这个可怕的安全错误是由跨域策略问题引起的,就像在大多数情况下那样,这些域在哪里交叉?一切都应该在本地机器上进行,没有调用其他服务。这不应该使用 IIS Express 发生,不是吗?
有人能帮忙吗?

4

2 回答 2

0

clientaccesspolicy.xml 应该放在wwroot文件夹中,并且还包括crossdomain.xml

于 2012-12-04T10:21:44.533 回答
0

如果您在解决方案中有多个启动项目,请确保您正在运行您的服务和正确的 Silverlight 项目。我有两个silverlight 项目并且开始了一个不包含clientaccesspolicy.xml 的错误项目。

于 2016-01-26T10:19:18.757 回答