CSLA ベースの DataPortal を Azure のクラウド サービスに配置すると、WinForms アプリケーションがビジネス オブジェクトにアクセスしようとすると、次の例外がスローされます。
System.ServiceModel.Security.SecurityNegotiationException: リモート エンドポイントとのセキュリティ ネゴシエーションが失敗したため、セキュリティで保護されたチャネルを開くことができません。これは、チャネルの作成に使用された EndpointAddress に EndpointIdentity が存在しないか、正しく指定されていないことが原因である可能性があります。EndpointAddress によって指定または暗示された EndpointIdentity がリモート エンドポイントを正しく識別していることを確認してください。
(およびこの内部例外) System.ServiceModel.FaultException: The message with Action ' http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue ' cannot be processing at the receiver, due to a ContractFilter EndpointDispatcher での不一致。これは、コントラクトの不一致 (送信者と受信者の間のアクションの不一致) または送信者と受信者の間のバインディング/セキュリティの不一致が原因である可能性があります。送信者と受信者が同じコントラクトと同じバインド (メッセージ、トランスポート、なしなどのセキュリティ要件を含む) を持っていることを確認します。
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>
私のWinFormsアプリのapp.config:
<?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にアップロードしました。ブランチは 2 つあります。master
ブランチには、Azure で作業しようとしているプロジェクトだけが含まれています。もう 1 つの分岐でtraditionalWCF
ある には、Azure で動作する標準の WCF サービスを示す 3 つの追加プロジェクトが含まれています。CSLA プロジェクトをセットアップするための比較とガイダンスとして、その作業用ファイル セットを使用したいと考えていました。
構成ファイルをどのように設定すればよいかわからず、いくつかのガイダンスを使用できます。