0

私は、Web サービスを呼び出してから SQL サーバーを呼び出す WCF サービスを開発しています。同じソリューション内からテストすると、すべてが機能します。現在、IIS で WCF サービスをホストしており、asp.net Web アプリケーションからサービスを呼び出そうとしています。現在、IIS サービスはローカル マシンでホストされています。SQL Server Management Studio で接続するときに Windows 認証を使用しています。Web サービスを呼び出すと、SQL を呼び出すときに次のエラーが発生するため、資格情報が気に入らないと想定しています。

Login failed for user 'MYDOMAIN\MYMACHINENAME$'.

Web サービスを呼び出すコードは次のとおりです。ご覧のとおり、資格情報を明示的に渡そうとしました。

var providerService = new ProviderServices.ProviderService();
providerService.Credentials = new NetworkCredential("myusername", "mypassword", "mydomain");
providerService.UseDefaultCredentials = false;

providerService.CheckProviderExclusion(PPLUser.CurrentProgram.ProgramLabel, ps.No, ps.ProviderName, ps.SocialSecurityNo);

例外の内部テキストは次のとおりです。

ユーザー「PCGUS\BON-0010882$」のログインに失敗しました。System.Data.SqlClient.SqlInternalConnection.OnError (SqlException 例外、ブール値 breakConnection、Action'1 wrapCloseInAction) で System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj、ブール値 callerHasConnectionLock、ブール値 asyncClose) で System.Data.SqlClient.TdsParser .TryRun(RunBehavior runBehavior、SqlCommand cmdHandler、SqlDataReader dataStream、BulkCopySimpleResultSet bulkCopyHandler、TdsParserStateObject stateObj、Boolean& dataReady) System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior、SqlCommand cmdHandler、SqlDataReader dataStream、BulkCopySimpleResultSet bulkCopyHandler、TdsParserStateObject stateObj) で System. System.Data の Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)。

SQL Server 接続を認証するようにサービスを構成するにはどうすればよいですか?

4

2 に答える 2

1

ここにはいくつかのレイヤーがあり、それぞれが次のレイヤーに送信する認証を選択できます。

WCF サービスは、Windows 資格情報を使用して Web サービスを呼び出しています。これがうまくいくと仮定します:

  • IIS の設定に応じて、これらの資格情報が使用されるか失われるかによって、呼び出しが IIS に送信されます。たとえば、IIS が匿名のみの場合、それは失われます。
  • 次に、web.config の設定によって資格情報が使用されるかどうかが決定されるアプリケーション プールに到達します。
  • 次にデータベースにアクセスし、接続文字列によって使用される資格情報が決定されます。

デフォルトでは、サービスが使用される前に再渡される資格情報を渡すことができないという「ダブル ホップ」の問題もあります。これがあなたに影響を与えているかどうかはわかりません。

于 2013-09-19T18:08:11.587 に答える
0

遅れるかもしれませんが、同じ解決策を探していました。しかし、私は自分自身を見つけました。1. inetmgr を実行します。2. アプリケーション プールに移動します。 3. アプリケーションが指している apppool を検索します。4. ID 列を確認します。 5. プロパティを右クリックして、ID 列の値を変更できます。6. ID ユーザーに Windows 認証が必要であることを確認します。

于 2016-08-16T04:31:05.117 に答える