У меня есть WebService (ISAPI DLL) с клиентом в Delphi 7. Когда я вызываю свой WebService с моим клиентом, все работает нормально. Проблема с клиентом в .NET от другой компании. Если в качестве сервера запущен apache (с isapi-обработчиком), веб-служба не запускается. На IIS сервере все ок.
Проблема в функции HttpExtensionProc (var ECB: TEXTENSION_CONTROL_BLOCK): DWORD; от ISAPIApp.pas. В этой точке входа отсутствуют данные контента (ECB.cbTotalBytes = 0, ECB.lpbData = ''). Но только на Apache (2.2.17) и клиенте .NET.
<code>
Request sent from delphi client - all ok, content is present in entery point:
24.11.2010 10:29:34 - lpszContentType: text/xml; charset="utf-8"
24.11.2010 10:29:34 - cbSize: 144
24.11.2010 10:29:34 - dwVersion: 1280
24.11.2010 10:29:34 - dwHttpStatusCode: 0
24.11.2010 10:29:34 - cbTotalBytes: 640
24.11.2010 10:29:34 - cbAvailable: 640
24.11.2010 10:29:34 - lpszLogData:
24.11.2010 10:29:34 - lpszMethod: POST
24.11.2010 10:29:34 - lpszQueryString:
24.11.2010 10:29:34 - lpszPathInfo: /soap/IWESS_WS
24.11.2010 10:29:34 - lpszPathTranslated: C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\soap\IWESS_WS
24.11.2010 10:29:34 - lpbData: <?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:Login xmlns:NS1="urn:WESS_WSIntf-IWESS_WS"><DBProfile xsi:type="xsd:string">WS test</DBProfile><Username xsi:type="xsd:string">LD</Username><Password xsi:type="xsd:string">ld</Password><Id_Function_Place xsi:type="xsd:int">5</Id_Function_Place></NS1:Login></SOAP-ENV:Body></SOAP-ENV:Envelope></p>
<p>fiddler log:
POST <a href="http://tresnak:8080/cgi-bin/WESS_WS.dll/soap/IWESS_WS" rel="nofollow">http://tresnak:8080/cgi-bin/WESS_WS.dll/soap/IWESS_WS</a> HTTP/1.1
SOAPAction: "urn:WESS_WSIntf-IWESS_WS#Login"
Content-Type: text/xml
User-Agent: Borland SOAP 1.2
Host: tresnak:8080
Content-Length: 657
Connection: Keep-Alive
Pragma: no-cache</p>
<p><?xml version="1.0" encoding="utf-8"?>
<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:Login xmlns:NS1="urn:WESS_WSIntf-IWESS_WS"><DBProfile xsi:type="xsd:string">WS test</DBProfile><Username xsi:type="xsd:string">LD</Username><Password xsi:type="xsd:string">ld</Password><Id_Function_Place xsi:type="xsd:int">5</Id_Function_Place></NS1:Login></SOAP-ENV:Body></SOAP-ENV:Envelope></p>
<p>Request sent from .NET client - fail, content is NOT present in entery point:
24.11.2010 10:29:46 - lpszContentType: text/xml; charset=utf-8
24.11.2010 10:29:46 - cbSize: 144
24.11.2010 10:29:46 - dwVersion: 1280
24.11.2010 10:29:46 - dwHttpStatusCode: 0
24.11.2010 10:29:46 - cbTotalBytes: 0
24.11.2010 10:29:46 - cbAvailable: 0
24.11.2010 10:29:46 - lpszLogData:
24.11.2010 10:29:46 - lpszMethod: POST
24.11.2010 10:29:46 - lpszQueryString:
24.11.2010 10:29:46 - lpszPathInfo: /soap/IWESS_WS
24.11.2010 10:29:46 - lpszPathTranslated: C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\soap\IWESS_WS
24.11.2010 10:29:46 - lpbData: </p>
<p>fiddler log:
POST <a href="http://tresnak:8080/cgi-bin/WESS_WS.dll/soap/IWESS_WS" rel="nofollow">http://tresnak:8080/cgi-bin/WESS_WS.dll/soap/IWESS_WS</a> HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.4952)
Content-Type: text/xml; charset=utf-8
SOAPAction: "urn:WESS_WSIntf-IWESS_WS#Login"
Host: tresnak:8080
Content-Length: 728
Expect: 100-continue
Connection: Keep-Alive</p>
<p><?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://www.gordic.cz/g3/ess/v01" xmlns:types="http://www.gordic.cz/g3/ess/v01/encodedTypes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><q1:Login xmlns:q1="urn:WESS_WSIntf-IWESS_WS"><DBProfile xsi:type="xsd:string">WS TEST</DBProfile><Username xsi:type="xsd:string">LD</Username><Password xsi:type="xsd:string">ld</Password><Id_Function_Place xsi:type="xsd:int">3</Id_Function_Place></q1:Login></soap:Body></soap:Envelope>
Где проблема? Почему ECB.lpbData не содержит SOAP-запрос, если вызывающим абонентом является .NET, а сервером является Apache?
Спасибо за помощь в решении.
Я пытаюсь включить отладочный журнал в apache и использую модуль DumpIO, а запрос мыла отсутствует в вызове .NET. Если вызов поступил от клиента Delphi, запрос SOAP регистрируется в журнале отладки.
Журнал отладки Apache от клиента Delphi:
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 50 bytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): POST /cgi-bin/WESS_WS.dll/soap/IWESS_WS HTTP/1.1\r\n
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 46 bytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): SOAPAction: "urn:WESS_WSIntf-IWESS_WS#Login"\r\n
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 41 bytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): Content-Type: text/xml; charset="utf-8"\r\n
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 23 bytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): User-Agent: test 1234\r\n
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 20 bytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): Host: tresnak:8080\r\n
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 21 bytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): Content-Length: 640\r\n
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 24 bytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): Connection: Keep-Alive\r\n
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 25 bytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): Cache-Control: no-cache\r\n
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 2 bytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): \r\n
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [readbytes-blocking] 640 readbytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 640 bytes
[Fri Nov 26 07:39:20 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): <?xml version="1.0"?>\r\n<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:Login xmlns:NS1="urn:WESS_WSIntf-IWESS_WS"><DBProfile xsi:type="xsd:string">WS test</DBProfile><Username xsi:type="xsd:string">LD</Username><Password xsi:type="xsd:string">ld</Password><Id_Function_Place xsi:type="xsd:int">5</Id_Function_Place></NS1:Login></SOAP-ENV:Body></SOAP-ENV:Envelope>\r\n
[Fri Nov 26 07:39:23 2010] [debug] mod_dumpio.c(142): mod_dumpio: dumpio_out
[Fri Nov 26 07:39:23 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_out (data-HEAP): 205 bytes
[Fri Nov 26 07:39:23 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_out (data-HEAP): HTTP/1.1 200 OK\r\nDate: Fri, 26 Nov 2010 06:39:20 GMT\r\nServer: Apache/2.2.17 (Win32)\r\nContent-Length: 536\r\nKeep-Alive: timeout=5, max=100\r\nConnection: Keep-Alive\r\nContent-Type: text/xml; charset="utf-8"\r\n\r\n
[Fri Nov 26 07:39:23 2010] [debug] mod_dumpio.c(142): mod_dumpio: dumpio_out
[Fri Nov 26 07:39:23 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_out (data-TRANSIENT): 536 bytes
[Fri Nov 26 07:39:23 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_out (data-TRANSIENT): <?xml version="1.0"?>\r\n<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:LoginResponse xmlns:NS1="urn:WESS_WSIntf-IWESS_WS"><LogToken xsi:type="xsd:string">{56B3BC03-9E94-4345-B583-30E4EE71A3D9}</LogToken></NS1:LoginResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>\r\n
[Fri Nov 26 07:39:23 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_out (metadata-FLUSH): 0 bytes
[Fri Nov 26 07:39:23 2010] [debug] mod_dumpio.c(142): mod_dumpio: dumpio_out
[Fri Nov 26 07:39:23 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_out (metadata-EOS): 0 bytes
[Fri Nov 26 07:39:23 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [eatcrlf-nonblocking] 0 readbytes
[Fri Nov 26 07:39:23 2010] [debug] mod_dumpio.c(127): mod_dumpio: dumpio_in - 730035
[Fri Nov 26 07:39:23 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:39:29 2010] [debug] mod_dumpio.c(127): mod_dumpio: dumpio_in - 730060
[Fri Nov 26 07:39:29 2010] [debug] mod_dumpio.c(142): mod_dumpio: dumpio_out
[Fri Nov 26 07:39:29 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_out (metadata-FLUSH): 0 bytes
[Fri Nov 26 07:39:29 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_out (metadata-EOC): 0 bytes
Журнал отладки Apache из .NET-клиента:
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 50 bytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): POST /cgi-bin/WESS_WS.dll/soap/IWESS_WS HTTP/1.1\r\n
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 96 bytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.4952)\r\n
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 39 bytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): Content-Type: text/xml; charset=utf-8\r\n
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 46 bytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): SOAPAction: "urn:WESS_WSIntf-IWESS_WS#Login"\r\n
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 20 bytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): Host: tresnak:8080\r\n
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 21 bytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): Content-Length: 728\r\n
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 22 bytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): Expect: 100-continue\r\n
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 24 bytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): Connection: Keep-Alive\r\n
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(113): mod_dumpio: dumpio_in [getline-blocking] 0 readbytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_in (data-HEAP): 2 bytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_in (data-HEAP): \r\n
[Fri Nov 26 07:41:08 2010] [error] [client 192.168.222.6] Premature end of script headers: WESS_WS.dll
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(142): mod_dumpio: dumpio_out
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_out (data-HEAP): 191 bytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_out (data-HEAP): HTTP/1.1 500 Internal Server Error\r\nDate: Fri, 26 Nov 2010 06:41:08 GMT\r\nServer: Apache/2.2.17 (Win32)\r\nContent-Length: 542\r\nConnection: close\r\nContent-Type: text/html; charset=iso-8859-1\r\n\r\n
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(142): mod_dumpio: dumpio_out
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_out (data-HEAP): 542 bytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(74): mod_dumpio: dumpio_out (data-HEAP): <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">\n<html><head>\n<title>500 Internal Server Error</title>\n</head><body>\n<h1>Internal Server Error</h1>\n<p>The server encountered an internal error or\nmisconfiguration and was unable to complete\nyour request.</p>\n<p>Please contact the server administrator,\n pavel.tresnak@haida.cz and inform them of the time the error occurred,\nand anything you might have done that may have\ncaused the error.</p>\n<p>More information about this error may be available\nin the server error log.</p>\n</body></html>\n
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_out (metadata-EOS): 0 bytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(142): mod_dumpio: dumpio_out
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_out (metadata-FLUSH): 0 bytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(142): mod_dumpio: dumpio_out
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_out (metadata-FLUSH): 0 bytes
[Fri Nov 26 07:41:08 2010] [debug] mod_dumpio.c(55): mod_dumpio: dumpio_out (metadata-EOC): 0 bytes