У меня есть собственное приложение веб-службы (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;).