0

IIS 7 が Web アプリケーションとして使用できるようにセットアップおよび構成された 2 つの異なる C++ ISAPI DLL があります。それらは、異なるドメイン ユーザー アカウントで実行されている異なるアプリケーション プールを使用してセットアップされます。私が抱えている問題は、アプリケーションの 1 つが SQL に接続すると、他のアプリケーションが接続できないことです。アプリケーションが接続を確立しようとする方法にコードの違いはありません。どちらも同じパラメーターで同じ静的ライブラリ メソッドを呼び出します。2 番目のアプリケーションを SQL に接続させる唯一の方法は、そのアプリケーション プール ユーザーを最初のアプリケーションと同じドメイン ユーザーに設定するか、またはその逆に設定することです (1 人のユーザーが不十分な権限を持つことを除外します)。SQL ドライバーの ODBC 接続プールがオンになっていることを再確認しました。ODBC データ ソース アドミニストレータのトレース ログを監視しました。両方のアプリケーション プールが異なるユーザーで実行されているときにトレース ログを監視すると、SQLAllocHandleトレースの開始と終了の両方で正常に表示されSQLDriverConnectますが、それを呼び出す最初のアプリケーションの開始と終了の両方でのみ成功します。2 番目のアプリケーションがSQLDriverConnectまったく同じパラメーターを使用して呼び出した場合、トレースは入力のみを示し、デバッグ ログも、この関数呼び出しが返されないことを示します。パケット トレースは、2 番目のアプリケーションが SQL サーバーへの接続を試みたことがないことを示しています。ただし、最初のアプリケーションは正常に接続され、SQL でプロファイラーを実行すると、SQL ステートメントの適切な実行が表示されます。これらのアプリケーションは、Windows 2003 x86 上で同じマルチユーザー構成を使用し、IIS 6 および古いバージョンの ODBC ドライバーを使用して問題なく動作しました。

簡単な ODBC 設定を見落としていることを願っていますが、検索結果は空です。事前に感謝します。

4

1 に答える 1

0

1 週間以上のトラブルシューティングと Microsoft との話し合いの後、最終的に解決策を見つけました。Microsoft の話によると、2003 年から 2008 年の間にプロセスが相互に対話する方法が変更され、静的リンク ライブラリを使用すると、別のユーザーで実行されているときにロックの問題が発生していました。ODBC コネクタを呼び出す前に新しいスレッドを導入すると、すべて正常に動作します。

于 2014-05-16T19:07:05.967 に答える