0

使用している 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>
4

1 に答える 1