Как настроить IIS 7 для разрешения подключения к удаленной базе данных из веб-сервера ISAPI - PullRequest
0 голосов
/ 11 октября 2010

У меня есть собственное приложение веб-службы (ISAPI), которое я создал с Delphi 2010. В настоящее время оно предоставляет только два метода.Первый из них, EchoString, предназначен для того, чтобы дать мне обратную связь о том, что веб-сервис работает правильно, и добавляет пару символов в строку, которую я посылаю ему из моего клиента веб-службы Delphi.Это всегда работает нормально.

Второй открытый метод - это тот, который мне действительно интересен. Я передаю этот метод в строку, содержащую XML-содержимое ClientDataset.Со стороны сервера мой код берет этот XML и вставляет его в набор ClientDataset, после чего передает эти данные в базу данных на стороне сервера.

Я использую компоненты IBExpress (IBDatabase, IBTransaction, IBQuery и т. Д.) для подключения к базе данных InterBase на стороне сервера.

Проблема в том, что, как только я пытаюсь подключить компонент IBDatabase к его базе данных, веб-метод завершается неудачей.Я думаю, что я исключил все другие источники для этой ошибки.Я могу создать и заполнить ClientDataset довольно большим XML-файлом ClientDataSet, отправленным с клиента, который включает в себя вложенные наборы данных без проблем (я использую модуль MidasLib, поэтому ClientDataSet не пытается загрузить DLL).Я могу создавать и настраивать, если не подключаться, базу данных IBD и ее различные компоненты.Опять без проблем.Как только я устанавливаю свойство Connected компонента IBDatabase в True изнутри веб-службы, происходит сбой.

Я запускаю IIS 7.5 под 64-битной версией Windows 7 (на моей машине разработки).Я попытался предоставить права полного доступа для всех (а также для IIS_IUSRS) как конкретной библиотеке DLL ISAPI, так и всему каталогу, в котором находится веб-служба.Это не решило проблему.

Я подозреваю, что это полностью проблема привилегий с IIS 7. Что я могу сделать, чтобы разрешить моей веб-службе ISAPI подключаться к клиентскому API InterBase, чтобы я мог использовать Интернетсервис для записи на сервер базы данных?'' '' '' '' '' '
Post Script: похоже, что соединение с Interbase из Web-сервиса не является проблемой.Я все еще выясняю точную причину, но теперь я смог успешно подключиться к Interbase из веб-службы.Я обновлю этот пост, как только узнаю причину, но этот вопрос больше не действителен.'' '' ''
Я отмечаю ответ Боба как правильный.Строка подключения была неправильной.На самом деле (и это смущает, но я бы скорее смутился, чем ввел в заблуждение), я получил предложение с .

Я сохранил информацию о своем соединении в строках ресурсов.Я сделал назначение в с предложением .Имя строки ресурса для свойства DatabaseName было DatabaseName.Предложение с привело к тому, что свойство DatabaseName было присвоено себе вместо значения в строке ресурса.Я исправил проблему, предварительно указав строку ресурса DatabaseName с именем модуля (т. Е. DatabaseName: = IBModUnit.DatabaseName;).

Ответы [ 2 ]

1 голос
/ 11 октября 2010

Я предполагаю, что вы можете использовать ту же строку подключения для подключения к базе данных InterBase из "родного" приложения VCL Forms на этом компьютере?

Возможно, глупый вопрос, но вы запускаете InterBase как сервис? (В противном случае библиотека ISAPI не сможет «увидеть» ее для подключения к ней).

0 голосов
/ 11 октября 2010

[Изменить]
Сожалею. Я написал глупую мысль о том, что IIS не будет иметь сетевых разрешений , И я не могу удалить это сообщение!

Но - я где-то читал, что права доступа к сервисам в более поздних версиях Windows были несколько уменьшены и учетная запись localsystem больше не имеет доступа к сети. Поскольку заголовок сообщения содержит «удаленный», может быть, вам нужно предоставить дополнительные разрешения вашей DLL или службе и / или службе Interbase или одному из других задействованных файлов?

...