0

私はWCFサービス(Fluent NHで実装)に取り組んでおり、Windowsサービスとしてホストされています。

コンソールアプリケーションを使用して、サービスメソッドの呼び出しをテストしています。

ここで、hibernate.cfg.xmlの接続文字列を次のように設定すると

<property name="connection.connection_string">Server=dev;Initial Catalog=DBTest;Integrated Security=True;</property>

エラーがスローされます: SqlException: ユーザーのログインに失敗しました

しかし、接続文字列を次のように変更すると、次のようになります。

<property name="connection.connection_string">Server=dev;Initial Catalog=DBTest;User Id=twr;Password=manager1;</property>

サービスメソッドを正常に呼び出します。

すべてのWCFサービスライブラリ、ホスティングWindowsサービス、およびコンソールアプリケーションは、ローカルマシンにのみ存在しますが、

Integrated Security = trueで機能しない理由を理解するのを手伝ってもらえますか?

ありがとうございました!

4

1 に答える 1

4

統合セキュリティ=trueは、接続先のSQLServerで「Windows認証」モードを使用してこのアプリケーションが自身を認証しようとすることを意味します。サービスは特定のユーザーアカウントで実行されています-SQLにログインするためにそのユーザーのアカウント権限を使用します。

SQL ServerインスタンスがそのWindowsサービスのユーザーアカウントへのログインを許可していない場合、そのエラーが発生します。単体テストでサービスを実行するユーザーは、テストコンソールアプリケーションとは異なる可能性があります。

これを試してください-テストコンソールアプリケーションを実行し、タスクマネージャーを起動します。[プロセス]タブで、サービスに関連付けられているプロセスと、サービスが実行されているユーザー名を確認します。単体テストフレームワークを実行し、ユーザー名もメモします。おそらく異なるでしょう。

SQL Server Management Studioに移動し、[セキュリティ]-> [ログイン]で、サービスが実行されているアカウント(タスクマネージャーを使用して見つけたアカウント)が一覧表示されているかどうかを確認します。そうでない場合は、追加して権限を付与します。

于 2009-10-29T18:00:08.917 に答える