07.12.2007 13:38:24SOAP, ошибка ASP при вызове функций Ответов: 7
Maxim.Korobov
Здравствуйте!
При вызове любой функции с помощью 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>

--------------------------------------------------------------

&#206;&#248;&#232;&#225;&#234;&#224;: 006~ASP 0207~Cannot use Request.Form~Cannot use Request.Form collection after calling BinaryRead.
-------------------------------------------
&#192;&#226;&#242;&#238;&#240;: http://caserv/RA/RA.asp
-------------------------------------------
&#202;&#238;&#228; &#238;&#248;&#232;&#225;&#234;&#232;: SOAP-ENV:Server
-------------------------------------------
&#196;&#229;&#242;&#224;&#235;&#232;: <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>
 
Ответы:
07.12.2007 14:07:32Kirill Sobolev
Вы запрос вручную собираете, без использования SOAP toolkit?
07.12.2007 14:13:04.
Собирается с помощью класса, которая 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..
07.12.2007 16:29:10Kirill Sobolev
А каким образом Вы сам метод вызываете?
07.12.2007 16:46:17.
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
07.12.2007 17:30:37Kirill Sobolev
А где Вы задаете сертификат для SSL?
07.12.2007 17:36:04.
Настроить доступ на основе сертификатов не получилось.
Настроил простой доступ через http. В частности, так, чтобы asp- и wsdl-файлы отображались в браузере. При вызове, например, ../CA/CA.ASP отображается XML, сообщая о том, что не переданы параметры для выполнения функции -> ASP работает.
07.12.2007 18:00:23Kirill Sobolev
Тут дело вот в чем - SOAP это не API ЦР, а всего лишь способ вызова его методов удаленно. Поэтому сам COM+, в котором эти методы реализованы, ожидает, что в контексте вызова будет предоставлен клиентский сертификат. Соответственно, без двухсторонней аутентификации ничего работать не будет.