0

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;)を付けることで、問題を修正しました。

4

2 に答える 2

1

同じ接続文字列を使用して、そのマシン上の「ネイティブ」VCLフォームアプリケーションからInterBaseデータベースに接続できると思いますか?

ばかげた質問かもしれませんが、InterBaseをサービスとして実行していますか?(そうでない場合、ISAPI DLLはそれに接続するためにそれを「見る」ことができません)。

于 2010-10-11T05:32:30.677 に答える
0

[編集]
ごめんなさい。IISにネットワークアクセス許可がないことを示唆する愚かなことを書きました<duh!>そして私はこの投稿を削除できないようです!

しかし、-私はどこかで、それ以降のWindowsバージョンのサービス権限がいくらか低下し、ローカルシステムアカウントがネットワークにアクセスできなくなったことを読みました。投稿のタイトルに「リモート」が含まれているので、DLLまたはサービス、Interbaseサービス、または関連する他のファイルの1つに追加のアクセス許可を付与する必要があるかもしれません。

于 2010-10-11T08:06:11.527 に答える