首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为Azure配置CSLA?

如何为Azure配置CSLA?
EN

Stack Overflow用户
提问于 2013-07-09 20:33:52
回答 1查看 1.4K关注 0票数 3

当我将基于CSLA的DataPortal放到Azure的Cloud中时,当它试图访问我的业务对象时,我的WinForms应用程序会抛出以下异常:

由于与远程端点的安全协商失败,无法打开System.ServiceModel.Security.SecurityNegotiationException:安全通道。这可能是由于用于创建通道的EndpointAddress中缺少或指定了错误的EndpointAddress。请验证由EndpointIdentity指定或暗示的EndpointAddress正确标识远程端点。 (和这个内部异常) System.ServiceModel.FaultException:由于ContractFilter在EndpointDispatcher上不匹配,带有动作'http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue‘的消息无法在接收方处理。这可能是因为契约不匹配(发送方和接收方之间的操作不匹配),或者是发送方和接收方之间的绑定/安全不匹配。检查发送方和接收方是否具有相同的合同和相同的约束力(包括安全要求,例如消息、传输、无)。

web.config

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <appSettings>
        <add key="DalManagerType" 
           value="DataAccess.Mock.DalManager,DataAccess.Mock" />
        <add key="CslaAuthentication" value="Csla" />
    </appSettings>

    <system.web>
        <compilation debug="true" targetFramework="4.5" />
        <httpRuntime maxRequestLength="2147483647" targetFramework="4.5" />
        <pages controlRenderingCompatibilityVersion="4.0" />
        <membership defaultProvider="ClientAuthenticationMembershipProvider">
            <providers>
                <add name="ClientAuthenticationMembershipProvider"
             type=
  "System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, 
   System.Web.Extensions, Version=4.0.0.0, Culture=neutral, 
   PublicKeyToken=31bf3856ad364e35" 
               serviceUri="" />
            </providers>
        </membership>
        <roleManager defaultProvider="ClientRoleProvider" enabled="true">
            <providers>
                <add name="ClientRoleProvider" 
type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, 
Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" 
               cacheTimeout="86400" />
            </providers>
        </roleManager>
    </system.web>

    <system.serviceModel>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
        <services>
            <service name="Csla.Server.Hosts.WcfPortal" 
                  behaviorConfiguration="returnFaults">
                <endpoint binding="wsHttpBinding" 
                  bindingConfiguration="wsHttpBinding_IWcfPortal" 
                  contract="Csla.Server.Hosts.IWcfPortal" />
                <endpoint contract="IMetadataExchange" binding="mexHttpBinding" 
                     address="mex" />
            </service>
        </services>
        <bindings>
            <wsHttpBinding>
                <binding name="wsHttpBinding_IWcfPortal" 
                          maxReceivedMessageSize="2147483647">
                    <security mode="None">
                        <message establishSecurityContext="false" />
                        <transport clientCredentialType="None" />
                    </security>
                    <readerQuotas maxBytesPerRead="2147483647" 
                        maxArrayLength="2147483647" 
                        maxStringContentLength="2147483647" 
                         maxNameTableCharCount="2147483647" 
                        maxDepth="2147483647" />
                </binding>
            </wsHttpBinding>
        </bindings>
        <behaviors>
            <serviceBehaviors>
                <behavior name="returnFaults">
                    <serviceDebug includeExceptionDetailInFaults="true" />
                    <serviceMetadata httpGetEnabled="true" />
                    <useRequestHeadersForMetadataAddress />
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />
        <directoryBrowse enabled="true" />
    </system.webServer>

</configuration>

app.config for my WinForms应用程序:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<configuration>

    <appSettings>
        <add key="CslaPropertyChangedMode" value="Windows" />
        <add key="CslaDataPortalProxy" 
            value="Csla.DataPortalClient.WcfProxy, Csla" />
        <add key="CslaDataPortalUrl" value="http://127.0.0.2:81/WcfPortal.svc" />
    </appSettings>

    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>

    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttpBinding_IWcfPortal" 
                            maxReceivedMessageSize="2147483647">
                    <security mode="None" />
                    <readerQuotas 
                        maxBytesPerRead="2147483647" 
                        maxArrayLength="2147483647" 
                        maxStringContentLength="2147483647" 
                        maxNameTableCharCount="2147483647" 
                        maxDepth="2147483647"/>
                </binding>
            </wsHttpBinding>
        </bindings>
        <client>
            <endpoint 
                address="http://127.0.0.2:81/WcfPortal.svc" 
                binding="wsHttpBinding" 
                bindingConfiguration="WSHttpBinding_IWcfPortal" 
                contract="Csla.Server.Hosts.IWcfPortal" 
                name="WSHttpBinding_IWcfPortal"/>
        </client>
    </system.serviceModel>

</configuration>

当我浏览到本地或Azure中的WcfPortal.svc文件时,我不会收到任何错误。当我浏览到本地或Azure中的WcfPortal.svc?wsdl时,我会得到正确的XML响应;没有错误。

我已经将整个解决方案上传到GitHub:AzureHostTest。有两个分支:master分支只包含我想在Azure工作的项目。另一个分支,traditionalWCF,包含另外三个项目,它们演示了在Azure中工作的标准WCF服务;我希望使用这组文件作为比较和指导来设置CSLA项目。

我不知道该如何设置我的配置文件,并可能需要一些指导。

EN

回答 1

Stack Overflow用户

发布于 2013-07-13 22:12:02

我想问题是你的端点地址..。http:// 127.0.0.2:81/WcfPortal.svc

可能是http://yourNamespace.cloudapp.net/WcfPortal.svc或http:// 127.0.0.1/WcfPortal.svc

您可以在本地环境中获得127.0.0.2:81作为主机,因为系统中的其他应用程序可能会使用默认主机。但是在蔚蓝中,您的应用程序默认部署到端口80。

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

https://stackoverflow.com/questions/17557700

复制
相关文章

相似问题

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