当我将基于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
<?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应用程序:
<?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项目。
我不知道该如何设置我的配置文件,并可能需要一些指导。
发布于 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。
https://stackoverflow.com/questions/17557700
复制相似问题