4

我从 silverlight 调用本地托管的 wcf 服务,但出现以下异常。

Iv 创建了一个 clientaccesspolicy.xml,它位于我主机的路由中。

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="*"/>
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

尝试向 URI“ http://localhost:8005/Service1.svc ”发出请求时出错。这可能是由于跨域配置错误。有关更多详细信息,请参阅内部异常。--->

{System.Security.SecurityException ---> System.Security.SecurityException:安全错误。在 MS.Internal.InternalWebRequest.Send() 在 System.Net.BrowserHttpWebRequest.BeginGetResponseImplementation() 在 System.Net.BrowserHttpWebRequest.InternalBeginGetResponse(AsyncCallback 回调,对象状态) 在 System.Net.AsyncHelper.<>c__DisplayClass4.b__3(Object sendState ) --- 内部异常堆栈跟踪结束 --- System.Net.AsyncHelper.BeginOnUI(BeginMethod beginMethod, AsyncCallback callback, Object state) at System.Net.BrowserHttpWebRequest.BeginGetResponse(AsyncCallback callback, Object state) at System.ServiceModel System.ServiceModel.Channels.HttpChannelFactory 中的 .Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteSend(IAsyncResult 结果)。

关于如何进步的任何想法?

4

10 回答 10

7

这里列出了一些调试技术..一个更有用的帖子..

于 2008-09-23T16:37:35.967 回答
2

我知道该服务工作正常,因为我将其添加为对基本网站的引用并且它工作正常。我将尝试使用 Fiddler,尽管由于 xaml 控件未嵌入网页中存在一个小问题,它使用内置的测试页渲染器。

这是iv发现需要检查的一些指针:

添加一个clientaccesspolicy.xml,如我的问题所示。

将 crossdomain.xml 添加到主机路由:

<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>

确保绑定是 basicHttp,因为这是 silverlight 唯一支持的绑定(当前)

该服务需要此属性:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 

有用的读物​​: http ://weblogs.asp.net/tolgakoseoglu/archive/2008/03/18/silverlight-2-0-and-wcf.aspx

http://timheuer.com/blog/archive/2008/06/06/changes-to-accessing-services-in-silverlight-2-beta-2.aspx

http://silverlight.net/forums/t/19191.aspx

http://timheuer.com/blog/archive/2008/04/09/silverlight-cannot-access-web-service.aspx

于 2008-09-23T19:55:40.530 回答
1

我通过网络广播提供的一些调试技术试图展示我写的一些技术:https ://www.livemeeting.com/cc/mseventsbmo/view?id=1032386656&role=attend&pw=F3D2F263

于 2008-09-23T18:26:17.937 回答
1

不知道您的问题是否相同,但我刚刚写了一篇博客,讲述了我这个周末试图通过我的 SL 应用程序与我的控制台托管的 WCF 服务交谈来实现跨域发生的主要痛苦。

http://wallism.wordpress.com/2009/03/01/silverlight-communication-exception/

简而言之,您必须有一个 crossdomain.xml 并且没有 'headers="*"'

Bad:
    <allow-access-from domain=""*"" headers="*" />

Good:
    <allow-access-from domain=""*"" />
    <allow-http-request-headers-from domain=""*"" headers=""*"" />

您可以使用“SOAPAction”代替 * 标头(无论哪种方式都可以)

哦,当你让它工作时,你可能想让它更安全一点:-)

祝你好运!

于 2009-03-01T16:13:47.317 回答
0

我首先通过使用 Fiddler、FireBug 或类似工具检查网络调用来确保 Silverlight 确实找到了您的客户端访问策略文件。

于 2008-09-23T16:35:45.363 回答
0

如果您在从您提供 Silverlight 应用程序的同一位置使用 WCF 服务,则不需要跨域策略。从多个实体之间存在关系的客户端返回 LINQ to SQL 数据时,我遇到了类似的错误。

首先确保您的 WCF 服务工作正常。通过创建一个简单的 ping 函数来回显其输入来做到这一点。确保你可以先调用它。如果这可行,而您的其他函数不起作用,则无论是参数还是函数的返回。如果第一个功能也失败,请使用 Fiddler 之类的工具查看通过线路发送的数据。用一个 。在主机端查看来自 localhost 的数据。所以像 http//localhost:1234./default.aspx 之类的东西,并为 WCF 地址使用相同的东西。

于 2008-09-23T16:38:50.520 回答
0

我发现John Papa所著的《 Data-Driven Services with Silverlight 2 》一书对此进行了广泛的讨论。我有同样的问题,这本优秀的书解释了这一切。

于 2009-01-06T20:17:13.370 回答
0

我遇到了类似的问题,删除服务引用并再次添加它为我解决了这个问题。

于 2013-02-22T15:36:40.457 回答
0

我有同样的问题。我确实看到silverlight客户端应用程序成功获取了clientaccesspolicy.xml。我确实通过firefox直接请求它来确保clientaccesspolicy.xml没有格式错误。该政策是广泛开放的,与上述相同。

现在奇怪的转折来了。如果我删除 clientaccesspolicy.xml 并添加 Flash 样式的 crossdomain.xml 策略文件,那么它可以工作。我确实通过检查网络看到了如何首先请求 clientaccesspolicy.xml 失败,然后 silverlight 回退到 crossdomain.xml。

所以我确实有一个解决方法,但我更喜欢让 clientaccesspolicy.xml 工作,这样就没有额外的不必要的网络往返。

有什么建议么?

于 2008-11-12T18:44:53.103 回答
0

确保正确定义了 WCF 服务的 Endpoints 和 Binding。从同一个应用程序调用 WCF 服务不需要跨域策略文件。

于 2009-12-10T08:54:29.633 回答