【问题标题】:WCF / Csla HellWCF / Csla地狱
【发布时间】:2009-10-16 08:49:35
【问题描述】:

我正在尝试构建一个概念验证 Csla 3.7/Silverlight 3 应用程序,并且一直在努力通过 Rocky's tutorials。这是一个非常简单的单表单/单业务对象数据编辑应用程序,在我尝试配置 Wcf 以便 Silverlight 应用程序可以与数据门户通信之前,一切都很顺利。

我得到的错误是:

CommunicationException was unhandled by user code

An error occurred while trying to make a request to URI 'http://localhost:1406/WcfPortal.svc'. 
This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, or a policy that is unsuitable for SOAP services. 
You may need to contact the owner of the service to publish a cross-domain policy file and to ensure it allows SOAP-related HTTP headers to be sent. 
This error may also be caused by using internal types in the web service proxy without using the InternalsVisibleToAttribute attribute. 
Please see the inner exception for more details.

我对此完全感到困惑,因为我对 Silverlight 和 WCF 有点不熟悉。对于 Csla Silverlight 应用程序,我的设置非常简单。我有 4 个项目:

  • CslaSilverlight:Silverlight 项目
  • CslaSilverlight.Client:Silverlight 类库
  • CslaSilverlight.Server:.NET 类库
  • CslaSilverlight.Web:托管 SL 应用程序的 ASPNET 项目

一切都在我的笔记本电脑上在 Cassini 下本地运行。我希望 DataPortal 在 Silverlight 之外运行,以便我可以访问 SQL Server。我认为问题可能与我在 Silverlight 应用程序中的 Wcf 配置有关,该应用程序在 ServiceReferences.ClientConfig 文件中指定:

<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IWcfPortal" maxBufferSize="65536"
                    maxReceivedMessageSize="65536" receiveTimeout="10" sendTimeout="10">
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:1406/WcfPortal.svc"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IWcfPortal"
                contract="Csla.WcfPortal.IWcfPortal" name="BasicHttpBinding_IWcfPortal" />
        </client>
    </system.serviceModel>
</configuration>

我想知道端口号是否重要,当我更改它时,我得到一个不同的错误。我也想知道端点地址的格式是否正确。

不确定它是否重要,但我在 ASPNet web.config 中的 serviceModel 设置是:

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WcfPortalBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="WcfPortalBehavior" name="Csla.Server.Hosts.Silverlight.WcfPortal">
        <endpoint address="" binding="basicHttpBinding" contract="Csla.Server.Hosts.Silverlight.IWcfPortal">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
  </system.serviceModel>

【问题讨论】:

    标签: wcf silverlight csla


    【解决方案1】:

    如果我的想法是正确的,那么错误可能会告诉您完全正确的事情,您缺少跨域策略。 silverlight 应用程序正在从远程位置访问 WCF 服务,需要授权才能接受请求。

    当项目分为三个部分(SL 应用程序、WCF Web 服务和网站)时,我在 dev 中发生了这种情况。网站和 WCF 服务是独立运行的,尽管它们是同一解决方案的一部分。因此,Cassini 运行了两次,您正在跨越边界。

    我有一个 clientaccesspolicy.xml 文件以及正在开发的 Web 服务,其中包含以下内容:

    <?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>
    

    该文件允许任何人和所有内容,您可以对其进行优化以用于生产,但在开发中这是最简单的方法。 Google wcf 客户端访问策略/wcf 跨域策略 - 这是一个常见问题。

    【讨论】:

    • 听起来合乎逻辑。我已经按照您的建议搜索了一个 clientaccesspolicy.xml 文件到我的 ASPNET Web 应用程序的根文件夹中,但它没有任何效果!
    • 我的直接在与 Web 服务的 .svc 文件相同的位置。你找到它了吗?
    • 哇!它工作了,只有一次......突然我现在得到“远程服务器返回错误:未找到”Cassini 已启动并在端口 3405 上运行。我的端点地址是 localhost:3405/WcfPortal.svc
    • 检查您的 WCF 项目属性,在 web 选项卡上将显示您的 WCF 应在哪个端口下运行的 cassini 设置。默认值为自动分配,这意味着每次运行时它都可以移动到不同的端口。在开发期间,我只是选择一个特定的端口并对其进行修复,因为部署将使用完全不同的东西,我只想知道服务始终在我认为的位置。
    • 我能问一下您的 .svc 文件中有什么吗?我有
    猜你喜欢
    • 2011-10-25
    • 2011-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多