Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 коннектор к web службам, модификация процедуры spSOAPMethodCall  [new]
max44
Member

Откуда: МОСКВА
Сообщений: 280
есть хранимая процедура позволяющая обращаться к веб сервисам spSOAPMethodCall

взята она от сюда
https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=576338&hl=spsoapmethodcall

код процедуры spSOAPMethodCall
+
ALTER PROCEDURE [dbo].[spSOAPMethodCall] (
	 @@URL		SysName
	,@@Header	XML	= NULL	OUTPUT
	,@@Body		XML	= NULL	OUTPUT
	,@@TimeOut	Int	= 900000
) WITH EXECUTE AS 'dbo' AS BEGIN
	-- Для установки Proxy воспользуйтесь "proxycfg -u"
	DECLARE	 @OLEHTTP		Int
		,@OLEStream		Int
		,@HTTPStatus		Int
		,@ErrCode		Int
		,@ErrMethod		SysName
		,@ErrSource		SysName
		,@ErrDescription	SysName
		,@@SOAPAction		SysName
		,@Request		XML
		,@Response		NVarChar(max)
		,@EOF			Bit

	-- OLE HTTPRequest
	EXEC @ErrCode = sys.sp_OACreate 'MSXML2.ServerXMLHTTP' ,@OLEHTTP OUT
	IF (@ErrCode != 0)
		SELECT	 @ErrMethod	= 'MSXML2.ServerXMLHTTP'
			,@ErrSource	= 'sp_OACreate'
			,@ErrDescription= 'Ошибка создания OLE объекта'
	ELSE BEGIN
		-- Генерация SOAP запроса
		;WITH XMLNAMESPACES (
			 'http://www.w3.org/2001/XMLSchema-instance'	AS [xsi]
			,'http://www.w3.org/2001/XMLSchema'		AS [xsd]
			,'http://schemas.xmlsoap.org/soap/envelope/'	AS [soap])
		SELECT	 @@SOAPAction	= @@Body.value('namespace-uri(/*[1])','SysName') + @@Body.value('local-name(/*[1])','SysName')
			,@Request	= (
		SELECT	 @@Header	AS [soap:Header]
			,@@Body		AS [soap:Body]
		FOR	XML Path('soap:Envelope'),Type)
		-- Установка TimeOut, HTTTP параметров, запрос
		EXEC @ErrCode = sys.sp_OAMethod @OLEHTTP ,'setTimeouts'	,NULL ,5000 ,60000 , 30000, @@TimeOut				IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'setTimeouts'		GOTO HTTPError END
		EXEC @ErrCode = sys.sp_OAMethod @OLEHTTP ,'open'		,NULL ,'POST' ,@@URL ,'false'				IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'open'		GOTO HTTPError END
		EXEC @ErrCode = sys.sp_OAMethod @OLEHTTP ,'setRequestHeader'	,NULL ,'Content-Type'	,'text/xml; charset=utf-8'	IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'setRequestHeader'	GOTO HTTPError END
		EXEC @ErrCode = sys.sp_OAMethod @OLEHTTP ,'setRequestHeader'	,NULL ,'SOAPAction'	,@@SOAPAction			IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'setRequestHeader'	GOTO HTTPError END
		EXEC @ErrCode = sys.sp_OAMethod @OLEHTTP ,'send'		,NULL ,@Request						IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'send'		GOTO HTTPError END
		-- Проверка сатуса HTTP ответа
		EXEC @ErrCode = sys.sp_OAGetProperty @OLEHTTP ,'status' ,@HTTPStatus OUT						IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'status'		GOTO HTTPError END
		IF (@HTTPStatus IN (200,500)) BEGIN
			-- Временый файл для постепенной закачки
			-- необходим вместо метода INSERT EXEC (> 8000 сииволов)
			-- Для отсутствия перекрытия параллельных запросов имя файл привязывается к OLE объекту по номеру
			SELECT	 @@SOAPAction	= Convert(VarChar,@OLEHTTP) + '.xml'
				,@Response	= ''
			EXEC @ErrCode = sys.sp_OAMethod @OLEHTTP ,'responseXml.save' ,NULL ,@@SOAPAction				IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'responceXml'		GOTO HTTPError END
			-- Закачка файла в переменную через OLE Stream
			EXEC @ErrCode = sys.sp_OACreate 'ADODB.Stream' ,@OLEStream OUT
			IF (@ErrCode != 0)
				SELECT	 @ErrMethod	= 'ADODB.Stream'
					,@ErrSource	= 'sp_OACreate'
					,@ErrDescription= 'Ошибка создания OLE объекта'
			ELSE BEGIN
				-- Открытие, установка парметров, указание файла
				EXEC @ErrCode = sys.sp_OAMethod @OLEStream ,'Open'							IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'Open'		GOTO StreamError END
				EXEC @ErrCode = sys.sp_OASetProperty @OLEStream ,'CharSet' ,'utf-8'					IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'CharSet'		GOTO StreamError END
				EXEC @ErrCode = sys.sp_OAMethod @OLEStream ,'LoadFromFile' ,NULL, @@SOAPAction				IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'LoadFromFile'	GOTO StreamError END
				-- Для обхода "особенности" чтения utf-8
				EXEC @ErrCode = sys.sp_OAMethod @OLEStream ,'ReadText' ,@ErrDescription OUT, 2				IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'ReadText'		GOTO StreamError END
				-- Рекурсивное порциальное чтение
				WHILE (1 = 1) BEGIN
					-- Проверка достижения конца файла
					EXEC @ErrCode = sys.sp_OAGetProperty @OLEStream ,'EOS' ,@EOF OUT				IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'EOS'			GOTO StreamError END
					IF (@EOF = 1) BREAK
					-- Чтение очережной порции
					EXEC @ErrCode = sys.sp_OAMethod @OLEStream ,'ReadText' ,@ErrDescription OUT, 128		IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'ReadText'		GOTO StreamError END
					SET @Response = @Response + @ErrDescription
				END
				-- Закрытие Stream
				EXEC @ErrCode = sys.sp_OAMethod @OLEStream ,'Close'							IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'Close'		GOTO StreamError END
				-- Уничтожение Stream
				GOTO StreamDestroy
				StreamError:	EXEC @ErrCode = sys.sp_OAGetErrorInfo @OLEStream ,@ErrSource OUT ,@ErrDescription OUT
				StreamDestroy:	EXEC @ErrCode = sys.sp_OADestroy @OLEStream
				-- Парсирование SOAP ответа
				IF (@ErrSource IS NULL) BEGIN
					;WITH XMLNAMESPACES (
						 'http://www.w3.org/2001/XMLSchema-instance'	AS [xsi]
						,'http://www.w3.org/2001/XMLSchema'		AS [xsd]
						,'http://schemas.xmlsoap.org/soap/envelope/'	AS [soap])
					SELECT	 @@Header	= R.X.query('/soap:Envelope/soap:Header/*')
						,@@Body		= R.X.query('/soap:Envelope/soap:Body/*')
					FROM	(SELECT Convert(XML,Replace(@Response,' encoding="utf-8"','')) AS X) R
					-- Парсирование SOAP ошибки
					;WITH XMLNAMESPACES (
						 'http://www.w3.org/2001/XMLSchema-instance'	AS [xsi]
						,'http://www.w3.org/2001/XMLSchema'		AS [xsd]
						,'http://schemas.xmlsoap.org/soap/envelope/'	AS [soap])
					SELECT	 @ErrMethod	= @@SOAPAction
						,@ErrSource	= @@Body.value('(/soap:Fault/faultcode)[1]'	,'SysName')
						,@ErrDescription= @@Body.value('(/soap:Fault/faultstring)[1]'	,'SysName')
					WHERE	@HTTPStatus = 500
				END
			END
		END ELSE
			SELECT	 @ErrMethod	= 'send'
				,@ErrSource	= 'spSOAPMethod'
				,@ErrDescription= 'Ошибочный статус HTTP ответа "' + Convert(VarChar,@HTTPStatus) + '"'
		-- Уничтожение HTTPRequest
		GOTO HTTPDestroy
		HTTPError:	EXEC @ErrCode = sys.sp_OAGetErrorInfo @OLEHTTP ,@ErrSource OUT ,@ErrDescription OUT
		HTTPDestroy:	EXEC @ErrCode = sys.sp_OADestroy @OLEHTTP
	END
	-- Вывод ошибок
	IF (@ErrSource IS NOT NULL) BEGIN
		RAISERROR('Ошибка при выполнении метода "%s" в "%s": %s',18,1,@ErrMethod,@ErrSource,@ErrDescription)
		RETURN	@@Error
	END
END
GO



при вызове этой процедуры она выдает такой request

<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>
    <Функция xmlns="http://сайтфункции">
 ...
    </Функция>
  </soap:Body>
</soap:Envelope>


вопрос как модифицировать процедуру, что бы она выдавала (в начало добавляла строку <?xml version="1.0" encoding="utf-8"?>) на выходе:
[b]<?xml version="1.0" encoding="utf-8"?>[/b]
<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>
    <Функция xmlns="http://сайтфункции">
 ...
    </Функция>
  </soap:Body>
</soap:Envelope>
13 сен 11, 19:00    [11271650]     Ответить | Цитировать Сообщить модератору
 Re: коннектор к web службам, модификация процедуры spSOAPMethodCall  [new]
max44
Member

Откуда: МОСКВА
Сообщений: 280
опечатка, без [b], хотел выделить строчку жирным шрифтом, что бы на ваше внимание обратить

вот такой хочеться результат получить:

<?xml version="1.0" encoding="utf-8"?>
<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>
    <Функция xmlns="http://сайтфункции">
 ...
    </Функция>
  </soap:Body>
</soap:Envelope>
13 сен 11, 19:03    [11271672]     Ответить | Цитировать Сообщить модератору
 Re: коннектор к web службам, модификация процедуры spSOAPMethodCall  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
max44
<?xml version="1.0" encoding="utf-8"?>
<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>
    <Функция xmlns="http://сайтфункции">
 ...
    </Функция>
  </soap:Body>
</soap:Envelope>
Откуда такое идиотское требование?
Корявый веб сервер? Написанный криворуким программистом, на каких-нидь Дельфях, полагаю.

+ Для танкистов
		EXEC @ErrCode = sys.sp_OAMethod @OLEHTTP ,'setRequestHeader'	,NULL ,'Content-Type'	,'text/xml; charset=utf-8'	IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'setRequestHeader'	GOTO HTTPError END
Строка для указания кодировки передачи данных. Указание же всяких "<?xml encoding" в самих данных монописуально.
А вообще пару строк изменить в очевидном месте.
14 сен 11, 01:09    [11272866]     Ответить | Цитировать Сообщить модератору
 Re: коннектор к web службам, модификация процедуры spSOAPMethodCall  [new]
max44
Member

Откуда: МОСКВА
Сообщений: 280
Mnior, не получаеться у меня эти пару строк найти (написать), на выходе получаю разнообразные ошибки.

ткните пожалуйста пальцем Танкиста, что бы полчилось так:
;INFO ;BeginRequest: /m2m/m2m_api.asmx 
Raw URL: /m2m/m2m_api.asmx 
User host address: 
Request type: POST 
Request content-type: text/xml; charset=utf-8 
Headers collection: 
    x-requestor: 
Request content: 
<?xml version="1.0" encoding="utf-8"?> 
<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><SendMessage xmlns="http://mcommunicator.ru/M2M"> 
<msid>номер</msid><message>текст</message><naming /> 
<login>логин</login><password>пароль</password> 
</SendMessage></soap:Body></soap:Envelope> 

сейчас, так: (так видят мои запросы на стороне сервиса)
;INFO ;BeginRequest: /M2M/m2m_api.asmx/ 
Raw URL: /M2M/m2m_api.asmx/ 
User host address: xxx.xxx.xxx.xxx 
Request type: POST 
Request content-type: text/xml; charset=utf-8 
Headers collection: 
    x-requestor: 
Request content: 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<soap:Body><SendMessage xmlns="http://mcommunicator.ru/M2M/"> 
<msid>номер</msid><message>текст</message><naming/> 
<login>логин</login><password>пароль</password> 
</SendMessage></soap:Body></soap:Envelope> 
  

эти пару строк мне удалось местами поменять:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
14 сен 11, 13:43    [11275285]     Ответить | Цитировать Сообщить модератору
 Re: коннектор к web службам, модификация процедуры spSOAPMethodCall  [new]
max44
Member

Откуда: МОСКВА
Сообщений: 280
Почему при попытке добавить строку <?xml version="1.0" encoding="utf-8"?> к xml типу она игнорируеться?

declare @X xml
SET @x='<?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>
    <GetMessageStatus xmlns="http://mcommunicator.ru/M2M">
      <messageID>long</messageID>
      <login>string</login>
      <password>string</password>
    </GetMessageStatus>
  </soap:Body>
</soap:Envelope>'

SELECT @x

Результат:
<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>
    <GetMessageStatus xmlns="http://mcommunicator.ru/M2M">
      <messageID>long</messageID>
      <login>string</login>
      <password>string</password>
    </GetMessageStatus>
  </soap:Body>
</soap:Envelope>


Если у строки <?xml version="1.0" encoding="utf-8"?> убрать знаки <>

declare @X xml
SET @x='?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>
    <GetMessageStatus xmlns="http://mcommunicator.ru/M2M">
      <messageID>long</messageID>
      <login>string</login>
      <password>string</password>
    </GetMessageStatus>
  </soap:Body>
</soap:Envelope>'

SELECT @x

результат:
?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><GetMessageStatus xmlns="http://mcommunicator.ru/M2M"><messageID>long</messageID><login>string</login><password>string</password></GetMessageStatus></soap:Body></soap:Envelope>
14 сен 11, 16:42    [11276969]     Ответить | Цитировать Сообщить модератору
 Re: коннектор к web службам, модификация процедуры spSOAPMethodCall  [new]
Glory
Member

Откуда:
Сообщений: 104751
max44
Почему при попытке добавить строку <?xml version="1.0" encoding="utf-8"?> к xml типу она игнорируеться?


Потому что все xml-b в MSSQL utf-16
14 сен 11, 17:54    [11277537]     Ответить | Цитировать Сообщить модератору
 Re: коннектор к web службам, модификация процедуры spSOAPMethodCall  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Glory
Потому что все xml-b в MSSQL utf-16
Чуть-чуть неточно.
Любая строка (в сиквеле в любой современной системе) имеет кодировку. В отличие от файла (или бинарного потока), которое не имеет такого понятия/свойства.
Ну и второе - XML имеет одну кодировку. (один из utf-16 там или ещё чего, это уже неважно)


max44, баш на баш. Вы мне скажите зачем/почему, а я вам где менять. Ок?
14 сен 11, 20:55    [11278133]     Ответить | Цитировать Сообщить модератору
 Re: коннектор к web службам, модификация процедуры spSOAPMethodCall  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
max44
Request type: POST 
Request content-type: text/xml; charset=utf-8 
Headers collection: 
    x-requestor: 
Request content: 
<?xml version="1.0" encoding="utf-16"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" ...
И какой способ суицида должен выбрать сервер?
14 сен 11, 21:04    [11278164]     Ответить | Цитировать Сообщить модератору
 Re: коннектор к web службам, модификация процедуры spSOAPMethodCall  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Mnior
В отличие от файла (или бинарного потока) ...
Кстати на лине, в принципе также теряет смысл, так как там везде utf-8.
14 сен 11, 21:11    [11278203]     Ответить | Цитировать Сообщить модератору
 Re: коннектор к web службам, модификация процедуры spSOAPMethodCall  [new]
max44
Member

Откуда: МОСКВА
Сообщений: 280
"max44, баш на баш. Вы мне скажите зачем/почему, а я вам где менять. Ок?"

Mnior, это требование поставщика услуги
вот описание API: http://mcommunicator.ru/M2M/m2m_api.asmx?op=SendMessage

+

SOAP 1.1
The following is a sample SOAP 1.1 request and response. The placeholders shown need to be replaced with actual values.

POST /M2M/m2m_api.asmx HTTP/1.1
Host: mcommunicator.ru
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://mcommunicator.ru/M2M/SendMessage"

<?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>
    <SendMessage xmlns="http://mcommunicator.ru/M2M">
      <msid>string</msid>
      <message>string</message>
      <naming>string</naming>
      <login>string</login>
      <password>string</password>
    </SendMessage>
  </soap:Body>
</soap:Envelope>


поставщик услуги обещает, что если будет передаваться заголовок , то сервис будет откликаться (работать)

сейчас у меня получаеться передавать запрос в таком виде
;INFO ;BeginRequest: /M2M/m2m_api.asmx/ 
Raw URL: /M2M/m2m_api.asmx/ 
User host address: xxx.xxx.xxx.xxx 
Request type: POST 
Request content-type: text/xml; charset=utf-8 
Headers collection: 
    x-requestor: 
Request content: 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<soap:Body><SendMessage xmlns="http://mcommunicator.ru/M2M/"> 
<msid>номер</msid><message>текст</message><naming/> 
<login>логин</login><password>пароль</password> 
</SendMessage></soap:Body></soap:Envelope> 
14 сен 11, 22:21    [11278338]     Ответить | Цитировать Сообщить модератору
 Re: коннектор к web службам, модификация процедуры spSOAPMethodCall  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
max44
Mnior, это требование поставщика услуги
вот описание API: http://mcommunicator.ru/M2M/m2m_api.asmx?op=SendMessage
Описание самое ни на есть стандартное. И стандартный WebService кушает без заголовков. Единственное, что может висит кастомный обработчик запросов, который это всё парсит самостоятельно, естественно коряво, сделав мульон лишних телодвижений. Другой вариант что активный фаервол настроен, естественно коряво.

max44
поставщик услуги обещает, что если будет передаваться заголовок , то сервис будет откликаться (работать)
Т.е. валится в ошибку. Ну коль вы не привели (лень?), сам как нибудь попробую вызвать завтра. А то очень интересно. Поисследую, если чё допишу в том топике.

Решение: смените тип данных переменной @Request XML -> NVarChar(max), а далее уберите Type и добавьте заголовок:
			,@Request	= N'<?xml version="1.0" encoding="utf-8"?>' + (
		SELECT	 @@Header	AS [soap:Header]
			,@@Body		AS [soap:Body]
		FOR	XML Path('soap:Envelope'))
И Convert, если ошибка, а то наугад и сходу не вспомню все косяки OLE Automation. Может завтра на работе найду время проверить/протестить.

И кстати, почему не последняя версия?
14 сен 11, 23:43    [11278497]     Ответить | Цитировать Сообщить модератору
 Re: коннектор к web службам, модификация процедуры spSOAPMethodCall  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
max44, отпишитесь о результатах.
15 сен 11, 14:56    [11281757]     Ответить | Цитировать Сообщить модератору
 Re: коннектор к web службам, модификация процедуры spSOAPMethodCall  [new]
max44
Member

Откуда: МОСКВА
Сообщений: 280
Mnior, спасибо за ответы.
к сожалению попробовать вариант с типом данных nvarchar вместо xml пока небыло возможности(не было досту к боевому серверу на котором не работает этот код). я обязательно попробую предложенный вами вариант и отпишусь о результах.


вот ответы на ранее заданные вами вопросы

"Т.е. валится в ошибку. Ну коль вы не привели (лень?), " HTTP status = 500 (select @HTTPStatus as httpStatus добавил селекты всех переменных в вашей х.п.)

"И кстати, почему не последняя версия? " на
Microsoft SQL Server 2005 - 9.00.5057.00 (X64)   Mar 25 2011 13:33:31   Copyright (c) 1988-2005 Microsoft Corporation  Standard Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2) 
просит точку с запятой перед WITH
 IF (@HTTPStatus = 500)
			WITH XMLNAMESPACES ( ...

вот ошибка
Msg 319, Level 15, State 1, Procedure spSOAPMethodCall, Line 75
Incorrect syntax near the keyword 'with'. If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon.
не знаю как обойти...


и вот еще попробовал spSOAPMethodCall (последней версии, ,@Request в xml формате ) на 2008 sql
Microsoft SQL Server 2008 (SP1) - 10.0.2573.0 (Intel X86)   Feb  4 2011 11:51:02   Copyright (c) 1988-2008 Microsoft Corporation  Express Edition with Advanced Services on Windows NT 6.0 <X86> (Build 6002: Service Pack 2) 
все заработало.
может дело в dll отвечающей за sys.sp_OAMethod? они у 2005 и 2008 отличаються и работают по разному?
19 сен 11, 17:56    [11300665]     Ответить | Цитировать Сообщить модератору
 Re: коннектор к web службам, модификация процедуры spSOAPMethodCall  [new]
Glory
Member

Откуда:
Сообщений: 104751
max44
вот ошибка
Msg 319, Level 15, State 1, Procedure spSOAPMethodCall, Line 75
Incorrect syntax near the keyword 'with'. If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon.
не знаю как обойти...

А прочитать
If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon
19 сен 11, 19:17    [11301238]     Ответить | Цитировать Сообщить модератору
 Re: коннектор к web службам, модификация процедуры spSOAPMethodCall  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
max44
Mnior
Т.е. валится в ошибку. Ну коль вы не привели (лень?)
HTTP status = 500
Это не ответ.
Что выдаёт при этом responseXml/responseText?

max44
Microsoft SQL Server 2005 - 9.00.5057.00 (X64)
   Mar 25 2011 13:33:31
   Copyright (c) 1988-2005 Microsoft Corporation  Standard Edition (64-bit)
on Windows NT 5.2 (Build 3790: Service Pack 2)
Microsoft SQL Server 2008 (SP1) - 10.0.2573.0 (Intel X86)
   Feb  4 2011 11:51:02
   Copyright (c) 1988-2008 Microsoft Corporation  Express Edition with Advanced Services
on Windows NT 6.0 <X86> (Build 6002: Service Pack 2)
может дело в dll отвечающей за sys.sp_OAMethod? они у 2005 и 2008 отличаються и работают по разному?
У вас так все знания строятся на "Слышал звон ..."?
sp_OAMethod это тупо интерфейс с COM/DCOM. А вот компоненты, аля MSXML2.ServerXMLHTTP к скулю не имеют никакого отношения. Да, операцонные системы у вас разные (и соответственно есть вероятность что MSXML тоже, хотя MSXML2 явно намекает на конкретную версию)

max44
и вот еще попробовал spSOAPMethodCall последней версии на 2008 sql все заработало.
facepalm
"Прикольно" отмазались "спецы" с mcommunicator.ru от "спеца" max44. max44, спецально для вас перевожу из слова:
mcommunicator.ru
max44, от вас не приходит <?xml version="1.0" encoding="utf-8"?>
Google Translate
max44, иди на**й со своими проблемами, сам разбирайся
20 сен 11, 14:04    [11305351]     Ответить | Цитировать Сообщить модератору
 Re: коннектор к web службам, модификация процедуры spSOAPMethodCall  [new]
max44
Member

Откуда: МОСКВА
Сообщений: 280
автор Mnior
"Прикольно" отмазались "спецы" с mcommunicator.ru от "спеца" max44. max44, спецально для вас перевожу из слова:

Спеца в кавычках на свой счет принимаю, на счет сотрудников mcommunicator.ru не уверен, что кним можно применять кавычки, я думаю там работают достойные специалисты.

Mnior, вы были правы, принудительное добавление сроки
<?xml version="1.0" encoding="utf-8"?>
положительного результата не дало, а дело было действительно в операционной системе, после перезарузки сервера с моей стороны(
Microsoft SQL Server 2005 - 9.00.5057.00 (X64)   Mar 25 2011 13:33:31   Copyright (c) 1988-2005 Microsoft Corporation  Standard Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)
) все заработало.

меня сбило с толку, то что х.п. spSOAPMethodCall до перезагрузки ОС замечательно работала с сервисом http://web.cbr.ru/ курсы валют с сервиса ЦБ получал на ура, а сервис "http://mcommunicator.ru давал ошибку. Сейчас использую последнюю версию spSOAPMethodCall.
Mnior еще раз спасибо за х.п. и советы при разборе моих ошибок!!!
7 окт 11, 18:45    [11404648]     Ответить | Цитировать Сообщить модератору
 Re: коннектор к web службам, модификация процедуры spSOAPMethodCall  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
max44, Welcome.

11278338:
max44
это требование поставщика услуги
max44
там работают достойные специалисты

вы были правы, принудительное добавление сроки
<?xml version="1.0" encoding="utf-8"?>
положительного результата не дало
Тогда откуда ноги растут?!

Если спецы требуют XML шапку в HTTP, значит такие они "спецы".

Но это нормально, во все тонкости не влезешь, особенно в эру ласапедостроения.
7 окт 11, 19:04    [11404769]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить