首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF / Csla地狱

WCF / Csla地狱
EN

Stack Overflow用户
提问于 2009-10-16 08:49:35
回答 1查看 2.2K关注 0票数 1

我试图建立一个概念的证明,CSLA3.7/Silverlight 3应用程序,并一直在我的方式通过洛基教程。它是一个非常简单的一个表单/一个业务对象数据编辑应用程序,直到我尝试配置Wcf以便Silverlight应用程序可以与data对话为止,一切都很有趣。

我得到的错误是:

代码语言:javascript
复制
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的n00b。我的设置是非常直接的一个Csla银光应用程序。我有4个项目:

  • CslaSilverlight :银灯项目
  • CslaSilverlight.Client : Silverlight类库
  • CslaSilverlight.Server:.NET类库
  • CslaSilverlight.Web :主持SL应用程序的ASPNET项目

一切都在卡西尼的笔记本电脑上运行。我希望DataPortal在Silverlight之外运行,这样我就可以访问Server了。我认为问题可能与Silverlight应用程序中的Wcf有关,该应用程序是在ServiceReferences.ClientConfig文件中指定的:

代码语言:javascript
复制
<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的ASPNet设置如下:

代码语言:javascript
复制
  <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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-16 08:55:43

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

这是我在开发,当项目是在三个部分,SL应用,WCF网络服务和网站。网站和WCF服务是独立运行的,尽管它们是同一解决方案的一部分。因此,卡西尼号运行了两次,而你正在穿越一个边界。

我有一个clientaccesspolicy.xml文件以及正在开发中的web服务,它具有以下内容:

代码语言:javascript
复制
<?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>

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1576917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档