使用している WCF サービスに非常に具体的な問題があります。
2 つのドロップダウンがある ASP.NET ページがあります。
- 最初のものは、ASP.NET コード ビハインドから取り込まれます。
- もう 1 つは、jQuery ajax 呼び出しを介して WCF サービスから取り込まれます。
どちらも偽装を使用して、ログイン ユーザーとして SQL Server データベースにアクセスします。これは、1 つの環境を除いて、すべてのお客様でうまく機能します。WCF サービスからデータベースを呼び出そうとすると、次の例外が発生します。
"Login failed for user 'NT AUTHORITY\\ANONYMOUS LOGON'.","StackTrace":"
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)\u000d\u000a
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)\u000d\u000a
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)\u000d\u000a
at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)\u000d\u000a
at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)\u000d\u000a
...
何らかの理由で、WCF サービスが匿名アカウントを使用してデータベースにアクセスしているようですが、ASP.NET コード ビハインドからの呼び出しは引き続き期待どおりに機能し、期待されるアカウントを使用してデータベースにアクセスします。接続文字列はIntegrated Security=SSPI
. 欠落している環境固有の構成であるに違いありませんが、委任と偽装が ASP.NET から直接機能するため、正確にはわかりません。
問題が何であるかを知っている人はいますか?
編集: system.servicemodel セクション:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<bindings>
<webHttpBinding>
<binding name="ServiceWebBindingName">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"></transport>
</security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="HistoryReportingEndpointBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="HistoryReportingServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceAuthorization principalPermissionMode="UseAspNetRoles" impersonateCallerForAllOperations="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="HistoryReportingServiceBehavior" name="ServiceLibrary.HistoryReporting">
<endpoint address="" behaviorConfiguration="HistoryReportingEndpointBehavior" binding="webHttpBinding" bindingConfiguration="ServiceWebBindingName" name="HistoryReportingWebEndPoint" contract="ServiceLibrary.IHistoryReporting" />
</service>
</services>
</system.serviceModel>