Как настроить IIS 7, чтобы разрешить подключение к удаленной базе данных из веб-сервера ISAPI

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

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

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

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

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

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

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


person Cary Jensen    schedule 11.10.2010    source источник
comment
Предполагая, что и IIS, и Interbase работают как службы, работают ли они под одной и той же учетной записью? Одним из факторов является запуск Interbase как службы, но только потому, что если она не работает как служба, она наверняка не будет работать под той же учетной записью, что и IIS.   -  person Marjan Venema    schedule 11.10.2010
comment
В этом случае и IIS, и InterBase являются сервисами. Я думаю, что проблема в том, что некоторая проблема конфигурации в IIS не позволяет моей веб-службе вызывать API-интерфейс Interbase, установленный на машине, на которой запущена веб-служба. Это странно, учитывая, что я могу писать в локальную файловую систему из своего Web-сервиса.   -  person Cary Jensen    schedule 11.10.2010


Ответы (2)


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

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

person Bob Swart    schedule 11.10.2010
comment
Да, на локальной машине, той же, на которой я тестировал веб-службу, собственное клиентское приложение может использовать IBDatabase для подключения к службе. - person Cary Jensen; 11.10.2010
comment
Но работает ли interBase на этой машине как служба? - person Bob Swart; 11.10.2010
comment
да. InterBase работает как служба Windows. Я запускаю и останавливаю Interbase с помощью апплета «Службы» в административных инструментах. Верно и то, что эта служба работает на том же компьютере, на котором установлена ​​веб-служба, но я не думаю, что это что-то меняет. - person Cary Jensen; 11.10.2010
comment
Боб, ты был прав. Информация о подключении была неверной. Смотрите в конце моего вопроса более подробное описание проблемы, которую я сам вызвал. - person Cary Jensen; 12.10.2010

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

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

person shunty    schedule 11.10.2010
comment
Да, я использовал слово «удаленный», поскольку версия Interbase, которую я использую, является удаленным сервером базы данных. В конкретной тестовой среде это внепроцессный сервер, работающий на том же компьютере (как служба Windows), но это не должно влиять на то, что я вижу. API Interbase берет на себя ответственность за направление моих запросов на удаленный сервер, если база данных находится на другом компьютере. Похоже, я даже не могу поговорить с API. - person Cary Jensen; 12.10.2010
comment
В порядке. Еще один, возможно, глупый вопрос. Виден ли fbclient.dll (или другой gds ??? что-то или другое) службе IIS? Возможно, он должен находиться в том же каталоге, что и isapi dll - по крайней мере, так мы знаем, что он может быть выполнен. Основными причинами, по которым я не смог открыть соединение, было либо отсутствие fbclient, либо неправильное (или отсутствующее) определение псевдонима. - person shunty; 12.10.2010
comment
Хорошее предложение. Я изучу это сегодня вечером. - person Cary Jensen; 12.10.2010
comment
Ну, я скопировал файлы клиентского API в исполняемый каталог, но это не имело значения. Позже я обнаружил, что первоначальная проблема была вызвана моей глупой ошибкой. См. Мою правку в конце вопроса, чтобы увидеть решение. - person Cary Jensen; 12.10.2010
comment
Ой. По крайней мере, вы можете добавить это к опасностям "с" .. анекдотами :-) - person shunty; 12.10.2010