【问题标题】:CommunicationException when calling a WCF from Silverlight从 Silverlight 调用 WCF 时发生 CommunicationException
【发布时间】:2009-08-21 13:57:45
【问题描述】:

这会偷走我的理智。我几乎浏览了我在网上找到的所有内容,但没有向前迈出一步。挫败感不足以描述无论我在做什么都会弹出此错误消息。

但是一个接一个。

我有一台带有 VS 2008 SP1 德语版 Si​​lverlight Tools 3.0 的 64 位 W2008 服务器机器

我想使用 Silverlight 应用程序中的 WCF 服务。而且,和许多人一样,我在调用结束时遇到了这个非常令人沮丧的无法描述的通信异常。

我创建了一个新的 WCF 服务,命名为 Endpoint,并将其绑定设置为 basicHttpBinding。我添加了属性

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

到Service1类和行

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

到App.config中的system.serviceModel

我将其他所有内容保持原样,并通过 WCF 客户端成功测试了该服务。然后我把它发布到我本地的IIS7到http://localhost/WCFTest

在我的 Silverlight 应用程序中,我使用 http://europa.therestofmydomain/WCFTest/WcfTest.Service1.svc 将服务添加到 Servicereference 中

我在客户端添加了以下代码:

using OSMDeepEarthExample.ServiceReference1;

...
Service1Client s1 = new Service1Client();
s1.GetDataCompleted += new System.EventHandler<GetDataCompletedEventArgs>(s1_GetDataCompleted);
s1.GetDataAsync(20);

void s1_GetDataCompleted(object sender, GetDataCompletedEventArgs e)
{
  CountFetchedData.Text = e.Result;
}

我添加了一个 clientaccesspolicy.xml 和一个 crossdomain.xml 到 webroot (C:\inetpub\wwwroot)

clientaccesspolicy.xml:

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

crossdomain.xml:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="*" />
  <allow-http-request-headers-from domain="*" headers="SOAPAction" />
</cross-domain-policy>

我重新启动了 IIS。两次。经常。

我安装了 Web Development Helper 可能是为了获得更多关于什么是错误的有意义的信息。但这会使 IE 崩溃。

我没有想法。很快就开始对我的硬件发起攻击。请帮助我的硬件!

正如约翰所说,我确实忘记了完整的错误消息:

Fehler beim Senden einer Anforderung an den URI "http://europa.therestofmydomain/WCFTest/WcfTest.Service1.svc"。 Ursache ist möglicherweise, dass ohne die entsprechende domänenübergreifende Richtlinie oder mit einer nicht für SOAP-Dienste geeigneten Richtlinie domänenübergreifend auf einen Dienst zugegriffen wurde。 Möglicherweise müssen Sie sich an den Besitzer des Diensts wenden, damit eine domänenübergreifende Richtliniendatei veröffentlicht und das Senden von sich auf SOAP beziehenden HTTP-Headern zugelassen wird。 Dieser Fehler kann auch durch Verwendung von internen Typen im Webdienstproxy ohne das InternalsVisibleToAttribute-Attribut verursacht werden。 Weitere Details finden Sie in der inneren Ausnahme。

简而言之,它表示可能缺少域间规则。

【问题讨论】:

  • 出于所有的挫败感,您一次都没有发布收到的异常。完全例外。 ex.ToString() 的结果。
  • 你说得对,我在帖子末尾添加了错误信息

标签: wcf silverlight


【解决方案1】:

哇,我做到了!

我从 webroot 中删除了 clientaccesspolicy.xml,只留下了 crossdomain.xml。什么奥德赛!谢谢你的收听,它帮助我理清了思路。我希望有类似问题的人会发现本文对您有所帮助!

【讨论】:

  • 这也适用于 vs2010、sl4、w7。几个小时后我找到了你的解决方案。 dankeschööööööön
  • 伙计...谢谢。这也对我有用。有人对这种(恕我直言,奇怪的)行为有合理的解释吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多