Delphi 2010で構築したネイティブWebサービスアプリケーション(ISAPI)があります。現時点では、2つのメソッドしか公開していません。最初のEchoStringは、Webサービスが正しく機能しているというフィードバックを提供するように設計されており、DelphiWebサービスクライアントから送信する文字列に2文字を追加します。これは常に正常に機能します。
2番目に公開されたメソッドは、私が本当に興味を持っているメソッドです。このメソッドに、ClientDatasetのXMLコンテンツを含む文字列を渡します。サーバー側から、私のコードはこのXMLを取得してClientDatasetに挿入し、その後、このデータをサーバー側のデータベースに送信します。
サーバー側のInterBaseデータベースに接続するために、IBExpressコンポーネント(IBDatabase、IBTransaction、IBQueryなど)を使用しています。
問題は、IBDatabaseコンポーネントをそのデータベースに接続しようとするとすぐに、Webメソッドが失敗することです。私はこのエラーの他のすべての原因を除外したと思います。ClientDatasetを作成し、クライアントから送信されたかなり大きなClientDataSetのXMLを作成して、ネストされたデータセットを問題なく含めることができます(MidasLibユニットを使用しているため、ClientDataSetはDLLを読み込もうとしません)。IBDatabaseとそのさまざまなコンポーネントに接続する以外に、作成および構成できます。繰り返しますが、問題はありません。Webサービス内からIBDatabaseコンポーネントのConnectedプロパティをTrueに設定するとすぐに、失敗します。
私はWindows764ビットUltimate(開発マシン上)でIIS7.5を実行しています。特定のISAPIDLLと、Webサービスが存在するディレクトリ全体の両方に対して、Everyone(および特にIIS_IUSRS)に完全な制御権を付与しようとしました。これは問題を解決しませんでした。
これは完全にIIS7の特権の問題だと思います。Webサービスを使用してデータベースサーバーに書き込むことができるように、ISAPI WebサービスがInterBaseクライアントAPIに接続できるようにするにはどうすればよいですか?'''''''''''
ポストスクリプト:WebサービスからInterbaseへの接続は問題ではないようです。私はまだ正確な原因を突き止めていますが、Webサービス内からInterbaseに正常に接続できるようになりました。原因がわかったらこの投稿を更新しますが、この質問は無効になります。'''''''
ボブの答えを正しいものとしてマークしています。接続文字列が間違っていました。実際(これは恥ずかしいことですが、誤解を招くよりも恥ずかしいと思います)、
接続情報をリソース文字列に保存しました。with句で割り当てを行いました。DatabaseNameプロパティのリソース文字列の名前はDatabaseNameでした。with句により、リソース文字列の値ではなく、DatabaseNameプロパティがそれ自体に割り当てられました。DatabaseNameリソース文字列の前にユニット名(つまり、DatabaseName:= IBModUnit.DatabaseName;)を付けることで、問題を修正しました。