| ||||
| ||||
Здравствуйте! При вызове любой функции с помощью SOAP возникает ошибка ASP. Пример запроса: <?xml version="1.0"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><NS1:GetUsersList xmlns:NS1="http://tempuri.org/RA/message/"/></SOAP-ENV:Body></SOAP-ENV:Envelope> -------------------------------------------------------------- Îøèáêà: 006~ASP 0207~Cannot use Request.Form~Cannot use Request.Form collection after calling BinaryRead. ------------------------------------------- Àâòîð: http://caserv/RA/RA.asp ------------------------------------------- Êîä îøèáêè: SOAP-ENV:Server ------------------------------------------- Äåòàëè: <detail><mserror:errorInfo xmlns:mserror="http://schemas.microsoft.com/soap-toolkit/faultdetail/error/"><mserror:returnCode>-2147467259 : Unspecified error </mserror:returnCode><mserror:serverErrorInfo><mserror:description>006~ASP 0207~Cannot use Request.Form~Cannot use Request.Form collection after calling BinaryRead.</mserror:description><mserror:source>mContextUtil.GetCertAndConfig</mserror:source></mserror:serverErrorInfo><mserror:callStack><mserror:callElement><mserror:component>WSDLOperation</mserror:component><mserror:description>Executing method GetUsersList failed</mserror:description><mserror:returnCode>-2147352567 : Exception occurred. </mserror:returnCode></mserror:callElement><mserror:callElement><mserror:component>Server</mserror:component><mserror:description>An unanticipated error occurred during the processing of this request.</mserror:description><mserror:returnCode>-2147352567 : Exception occurred. </mserror:returnCode></mserror:callElement></mserror:callStack></mserror:errorInfo></detail> | ||||
Ответы: | ||||
| ||||
Вы запрос вручную собираете, без использования SOAP toolkit? | ||||
| ||||
Собирается с помощью класса, которая Delphi сгенерировала на основе WSDL-файла. Вчера пробовал в VB 6 и SOAP Toolkit 3 - ошибка та же. Из Application Log сервера: 1. Event Type: Error Event Source: VBRuntime Event Category: None Event ID: 1 Date: 12/7/2007 Time: 2:04:31 PM User: N/A Computer: CASERV Description: The VB Application identified by the event source logged this Application Registration: Thread ID: 2056 ,Logged: Ошибка в методе UserView.GetUsersList: (0x80004005) 006~ASP 0207~Cannot use Request.Form~Cannot use Request.Form collection after calling BinaryRead. 2. Event Type: Error Event Source: MSSOAP Event Category: Generic Event ID: 16 Date: 12/7/2007 Time: 2:04:31 PM User: N/A Computer: CASERV Description: Soap error: Executing method GetUsersList failed. 3. Event Type: Error Event Source: MSSOAP Event Category: SoapServer Event ID: 16 Date: 12/7/2007 Time: 2:04:31 PM User: N/A Computer: CASERV Description: Soap error: An unanticipated error occurred during the processing of this request.. | ||||
| ||||
А каким образом Вы сам метод вызываете? | ||||
| ||||
Delphi: На форме компонент HTTPRIO1: THTTPRIO; Свойства: Port = UserViewSoapPort; Service = RA; WSDLLocation = 'локальная копия wsdl-файла ЦР'; Обработчик: var Res: string; begin Res := (HTTPRIO1 as UserViewSoapPort).GetUsersList; end; ------------------------------------------------------------ VB: Dim a As SoapClient30 Dim res As String Set a = New SoapClient30 a.MSSoapInit "C:\RA.wsdl", "RA", "UserViewSoapPort" a.ConnectorProperty("Timeout") = 5000 res = a.GetUsersList | ||||
| ||||
А где Вы задаете сертификат для SSL? | ||||
| ||||
Настроить доступ на основе сертификатов не получилось. Настроил простой доступ через http. В частности, так, чтобы asp- и wsdl-файлы отображались в браузере. При вызове, например, ../CA/CA.ASP отображается XML, сообщая о том, что не переданы параметры для выполнения функции -> ASP работает. | ||||
| ||||
Тут дело вот в чем - SOAP это не API ЦР, а всего лишь способ вызова его методов удаленно. Поэтому сам COM+, в котором эти методы реализованы, ожидает, что в контексте вызова будет предоставлен клиентский сертификат. Соответственно, без двухсторонней аутентификации ничего работать не будет. | ||||