Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / SOAP запрос к веб серверу, хочу вызвать метод... / 3 сообщений из 3, страница 1 из 1
17.02.2006, 05:44
    #33550741
Maep
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOAP запрос к веб серверу, хочу вызвать метод...
Дорогие друзья!
Я понимаю, что вопрос, вероятно. глупый. Но я вчера болел за нашу хоккейную сборную, у нас это было с 2 до 4:30 ночи, работаю с 8:30... войдите в положение

У меня есть веб сервис на C# с методом HelloWorld. Если писать клиента тоже на C# или в чсем то еще в майкрософтовской студии, то делается все шикарно: web reference и пошел.

Проблема в том, что я должен написать сервис для готового клиента который работает по протоколу ММ7 (этj основанный на SOAP протокол) и довольно трудно его тестировать.. короче, хочу написать тестовое приложение, которое будет посылать SOAP запросы к сервису, получать ответы итп.

Ну что я подумал. Берем ченить типа дельфей, открываем сокет. коннектимся к хотсу с сервисом и льем туда в виде текста SOAP запрос согласно тому что указывается на тестовой страничке... или утилитой WebserviceStudio20 (если кто с такой знаком).

Получается, как водится, полная ерунда.
А именно такой вот ексепшн насервисе

System.NullReferenceException was unhandled
Message="Object reference not set to an instance of an object."
Source="WebDev.WebHost"
StackTrace:
at Microsoft.VisualStudio.WebHost.Request.IsBadPath()
at Microsoft.VisualStudio.WebHost.Request.TryParseRequest()
at Microsoft.VisualStudio.WebHost.Request.Process()
at Microsoft.VisualStudio.WebHost.Host.ProcessRequest(Connection conn)
at Microsoft.VisualStudio.WebHost.Host.ProcessRequest(Connection conn)
at Microsoft.VisualStudio.WebHost.Server.OnSocketAccept(Object acceptedSocket)
at System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state)


Более того, что поразительно: если в утилите WebserviceStudio20 не сделать invoke на методе а просто заполнить все поля в Send Request и нажать Send, тот же еффект. В чем моя концептуальная ошибка?

Вот код дельфи:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
procedure TForm1.Button1Click(Sender: TObject);
var
s : string;
b : boolean;
begin
 
  b := TcpClient1.Connect;
 
  if not b then
  begin
    ShowMessage('connect failed');
    exit;
  end;
 
  TcpClient1.Sendln('POST /WebSite1/Service.asmx HTTP/1.1' +
                    'Host: localhost '+
                    'Content-Type: text/xml; charset=utf-8 ' +
//                    'Content-Length: nnnn ' +
                    'SOAPAction: "http://tempuri.org/HelloWorld" ' +
 
                    ' <?xml version="1.0" encoding="utf-16"?> ' +
                    ' <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> '+
                    '  <soap:Body> ' +
                    '    <HelloWorld xmlns="http://tempuri.org/" /> '+
                    '  </soap:Body> '+
                    '</soap:Envelope>'  + #$D#$A);
 
  TcpClient1.Close;
end;

Подскажите, где таки я неправ?
Может какой нить просотй пример, где посылается в виде текста запрос на выполнение метода..

Заранее спасибо!
...
Рейтинг: 0 / 0
17.02.2006, 10:54
    #33551146
qu-qu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOAP запрос к веб серверу, хочу вызвать метод...
Maep... Может какой нить просотй пример, где посылается в виде текста запрос на выполнение метода..

Заранее спасибо!

Эпиграф: "мы дельфиев в глаза не видали... все больше по-простому, по-рабоче-крестьянски, стандартными средствами типа WSH".

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
Dim xmlHttp, DOC, strHostName, strURL

strHostName = "www.some.where.ru"
'              ^^^^^^^^^^^ здесь поправить адрес веб-сервера
strURL = "http://" & strHostName & "/vdir/AnyCoolWebService.asmx"
'                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^ здесь поправить виртуальный адрес веб-службы
CallWebMethod strURL, strHostName, "SomeStupidMethod1",  111 . 1 

CallWebMethod strURL, strHostName, "SomeStupidMethod2",  222 . 22 

CallWebMethod strURL, strHostName, "SomeStupidMethod3",  333 . 333 

Sub CallWebMethod(urlAddress, hostName, methodName, methodParameter)

	Set DOC = CreateObject("MSXML2.DOMDocument")
	DOC.loadXML("<?xml version='1.0' encoding='utf-8'?>" & _
	"<soap:Envelope  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " & _
	"		xmlns:xsd='http://www.w3.org/2001/XMLSchema' " & _
	"		xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>" & _
	"  <soap:Body>" & _
	"    <" & methodName & " xmlns='urn:dummy-name-space'>" & _
	"      <realParm>" & methodParameter & "</realParm>" & _
	"    </" & methodName & ">" & _
	"  </soap:Body>" & _
	"</soap:Envelope>")
	If DOC.parseError.errorCode <>  0  Then
		WScript.Echo(DOC.parseError.reason)
		WScript.Echo(DOC.parseError.srcText)
		WScript.Quit
	End If
	
	Set xmlHttp = CreateObject("MSXML2.xmlHttp")
	xmlHttp.OPEN "POST", urlAddress, False
	xmlHttp.setRequestHeader "Host", hostName
	xmlHttp.setRequestHeader "Content-type", "text/xml"
	xmlHttp.setRequestHeader "SOAPAction", "urn:dummy-name-space/" & methodName
	xmlHttp.SEND DOC
	WScript.Echo xmlHttp.getAllResponseHeaders()
	WScript.Echo xmlHttp.responseText
	
	Set xmlHttp = Nothing
	Set DOC = Nothing
End Sub
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
10.07.2007, 17:39
    #34651211
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOAP запрос к веб серверу, хочу вызвать метод...
Maep
Подскажите, где таки я неправ?
Может какой нить просотй пример, где посылается в виде текста запрос на выполнение метода..

Заранее спасибо!

Отсутствует разделитель между строками

Код: plaintext
1.
'POST /WebSite1/Service.asmx HTTP/1.1' +
                    'Host: localhost '+
Т.е. получилась такая строка:

Код: plaintext
'POST /WebSite1/Service.asmx HTTP/1.1Host: localhost '+ ...

а нужно

Код: plaintext
1.
2.
POST /WebSite1/Service.asmx HTTP/ 1 . 1 
Host: localhost
...
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / SOAP запрос к веб серверу, хочу вызвать метод... / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]