Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Коннектор к веб-службам. MS SQL 2000 / 24 сообщений из 24, страница 1 из 1
15.07.2008, 08:56
    #35430111
YoriKim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
На одном хосте нужно вызвать веб-службу из хранимой процедуры. Как это можно сделать в MS SQL 2000?
...
Рейтинг: 0 / 0
15.07.2008, 09:40
    #35430188
Knyazev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
sp_OA...
ESP

???
...
Рейтинг: 0 / 0
15.07.2008, 09:42
    #35430198
YoriKim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
saop
...
Рейтинг: 0 / 0
15.07.2008, 09:44
    #35430204
YoriKim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
soap*
...
Рейтинг: 0 / 0
15.07.2008, 09:54
    #35430227
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
YoriKimНа одном хосте нужно вызвать веб-службу из хранимой процедуры. Как это можно сделать в MS SQL 2000?Вариант - OLE Automation.
Вот код для примера на 2005м.
Код: sql
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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
CREATE PROCEDURE [dbo].[spSOAPMethodCall] (
	 @@URL		SysName
	,@@Header	XML	= NULL	OUTPUT
	,@@Body		XML	= NULL	OUTPUT
) AS BEGIN
	-- Для установки Proxy воспользуйтесь "proxycfg -u"

	DECLARE	 @OLEObject		Int
		,@HTTPStatus		Int
		,@ErrCode		Int
		,@ErrMethod		SysName
		,@ErrSource		SysName
		,@ErrDescription	SysName
		,@@SOAPAction		SysName
		,@Request		XML

	;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)

	EXEC @ErrCode = sys.sp_OACreate 'MSXML2.ServerXMLHTTP', @OLEObject OUT
	IF (@ErrCode = 0) BEGIN
		EXEC @ErrCode = sys.sp_OAMethod @OLEObject ,'open'		,NULL ,'POST' ,@@URL ,'false'				IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'open'		GOTO Error END
		EXEC @ErrCode = sys.sp_OAMethod @OLEObject ,'setRequestHeader'	,NULL ,'Content-Type'	,'text/xml; charset=utf-8'	IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'setRequestHeader'	GOTO Error END
		EXEC @ErrCode = sys.sp_OAMethod @OLEObject ,'setRequestHeader'	,NULL ,'SOAPAction'	,@@SOAPAction			IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'setRequestHeader'	GOTO Error END
		EXEC @ErrCode = sys.sp_OAMethod @OLEObject ,'send'		,NULL ,@Request						IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'send'		GOTO Error END

		EXEC @ErrCode = sys.sp_OAGetProperty @OLEObject ,'status' ,@HTTPStatus OUT						IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'status'		GOTO Error END
		IF (@HTTPStatus IN (200,500)) BEGIN
			DECLARE	@Response TABLE ( Response NVarChar(max) )
			INSERT	@Response
			EXEC @ErrCode = sys.sp_OAGetProperty @OLEObject ,'responseText'							IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'responseText'	GOTO Error END

			;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	@Response CROSS APPLY (SELECT Convert(XML,Replace(Response,' encoding="utf-8"','')) AS X) R
			-- Fault
			;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 ELSE
			SELECT	 @ErrMethod	= 'send'
				,@ErrSource	= 'spSOAPMethod'
				,@ErrDescription= 'Ошибоный статус HTTP ответа "' + Convert(VarChar,@HTTPStatus) + '"'

		GOTO Destroy
	Error:	EXEC @ErrCode = sys.sp_OAGetErrorInfo @OLEObject ,@ErrSource OUT ,@ErrDescription OUT
	Destroy:EXEC @ErrCode = sys.sp_OADestroy @OLEObject
		IF (@ErrSource IS NOT NULL) BEGIN
			RAISERROR('Ошибка при выполнении метода "%s" в "%s": %s',18,1,@ErrMethod,@ErrSource,@ErrDescription)
			IF (@@TranCount > 0 AND XACT_STATE() != 0)
				ROLLBACK
			RETURN	@@Error
		END
	END ELSE BEGIN
		RAISERROR('Ошибка при создании OLE объекта "MSXML2.ServerXMLHTTP"',18,1)
		RETURN	@@Error
	END
END
GO

Вызов делается так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
DECLARE	 @URL		SysName
	,@Header	XML
	,@Body		XML
-- Создание запроса
;WITH XMLNAMESPACES (DEFAULT '<WebService URI>')
SELECT	 @URL	= '<WebService URL>'
	,@Body		= (
SELECT	 <WebMethod Param1 Value>	AS [WebMethod Param1 Name]
	,<WebMethod ParamN Value>	AS [WebMethod ParamN Name]
FOR	XML Path('<WebMethod Name>'),Type)
-- Вызов WebMethod-а
EXEC	dbo.spSOAPMethodCall
		 @URL
		,@Header	OUT	
		,@Body		OUT
-- Результат
SELECT	 @Header
	,@Body
...
Рейтинг: 0 / 0
15.07.2008, 10:12
    #35430279
YoriKim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
Спасибо. Сейчас буду портировать на 2000 :)
...
Рейтинг: 0 / 0
25.07.2008, 20:02
    #35453158
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
Есть одна неприятная весчть в OLE Automation: Это чтение значений более 8000 символов.
В выше приведённом случае это решается через INSERT EXEC. Но у него свои ограничеия использования (например, внутре другого INSERT EXEC).
Вот жалкие попытки обойти:
Код: sql
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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
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

Жалкие, потому-что нужен доступ к файловой системе. :(
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
11.04.2011, 10:26
    #37209470
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
Подправим вариант для INSERT EXEC. Особенно актуально для вызова из Job-а, т.к. размер строковых данных не устанавливается максимальным, как это делается для нативного клиента.
Mnior
Код: sql
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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
CREATE PROCEDURE [dbo].[spSOAPMethodCall] (
	 @@URL		SysName
	,@@Header	XML	= NULL	OUTPUT
	,@@Body		XML	= NULL	OUTPUT
) AS BEGIN
	-- Для установки Proxy воспользуйтесь "proxycfg -u"

	DECLARE	 @OLEObject		Int
		,@HTTPStatus		Int
		,@ErrCode		Int
		,@ErrMethod		SysName
		,@ErrSource		SysName
		,@ErrDescription	SysName
		,@@SOAPAction		SysName
		,@Request		XML

	;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)

	EXEC @ErrCode = sys.sp_OACreate 'MSXML2.ServerXMLHTTP', @OLEObject OUT
	IF (@ErrCode = 0) BEGIN
		EXEC @ErrCode = sys.sp_OAMethod @OLEObject ,'open'		,NULL ,'POST' ,@@URL ,'false'				IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'open'		GOTO Error END
		EXEC @ErrCode = sys.sp_OAMethod @OLEObject ,'setRequestHeader'	,NULL ,'Content-Type'	,'text/xml; charset=utf-8'	IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'setRequestHeader'	GOTO Error END
		EXEC @ErrCode = sys.sp_OAMethod @OLEObject ,'setRequestHeader'	,NULL ,'SOAPAction'	,@@SOAPAction			IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'setRequestHeader'	GOTO Error END
		EXEC @ErrCode = sys.sp_OAMethod @OLEObject ,'send'		,NULL ,@Request						IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'send'		GOTO Error END

		EXEC @ErrCode = sys.sp_OAGetProperty @OLEObject ,'status' ,@HTTPStatus OUT						IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'status'		GOTO Error END
		IF (@HTTPStatus IN (200,500)) BEGIN
			DECLARE	@Response TABLE ( Response NVarChar(max) )
			SET TEXTSIZE 2147483647;
			INSERT	@Response
			EXEC @ErrCode = sys.sp_OAGetProperty @OLEObject ,'responseText'							IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'responseText'	GOTO Error END

			;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	@Response CROSS APPLY (SELECT Convert(XML,Replace(Response,' encoding="utf-8"','')) AS X) R
			-- Fault
			;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 ELSE
			SELECT	 @ErrMethod	= 'send'
				,@ErrSource	= 'spSOAPMethod'
				,@ErrDescription= 'Ошибоный статус HTTP ответа "' + Convert(VarChar,@HTTPStatus) + '"'

		GOTO Destroy
	Error:	EXEC @ErrCode = sys.sp_OAGetErrorInfo @OLEObject ,@ErrSource OUT ,@ErrDescription OUT
	Destroy:EXEC @ErrCode = sys.sp_OADestroy @OLEObject
		IF (@ErrSource IS NOT NULL) BEGIN
			RAISERROR('Ошибка при выполнении метода "%s" в "%s": %s',18,1,@ErrMethod,@ErrSource,@ErrDescription)
			IF (@@TranCount > 0 AND XACT_STATE() != 0)
				ROLLBACK
			RETURN	@@Error
		END
	END ELSE BEGIN
		RAISERROR('Ошибка при создании OLE объекта "MSXML2.ServerXMLHTTP"',18,1)
		RETURN	@@Error
	END
END
GO

...
Рейтинг: 0 / 0
19.04.2011, 10:26
    #37221980
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
Лишние переменные, вызовы а главное баг , сильно влияют на производительность.
Код
Код: 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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
ALTER PROCEDURE [dbo].[spSOAPMethodCall] (
	 @@URL		SysName
	,@@Header	XML	= NULL	OUTPUT
	,@@Body		XML	= NULL	OUTPUT
	,@@TimeOut	Int	=  900000 
	,@@OutError	Bit	=  0 
) WITH EXECUTE AS 'dbo' AS BEGIN
	-- Для установки Proxy воспользуйтесь "proxycfg -u"
	DECLARE	 @OLEHTTP	Int
		,@HTTPStatus	Int
		,@ErrCode	Int
		,@ErrMethod	SysName
		,@ErrSource	SysName
		,@ErrDescript	NVarChar( 4000 )
		,@SOAPAction	SysName
		,@Length	Int
		,@Request	XML
		,@Response	XML

	-- OLE HTTPRequest
	EXEC @ErrCode = sys.sp_OACreate 'MSXML2.ServerXMLHTTP' ,@OLEHTTP OUT
	IF (@ErrCode !=  0 )
		SELECT	 @ErrMethod	= 'MSXML2.ServerXMLHTTP'
			,@ErrSource	= 'sp_OACreate'
			,@ErrDescript	= 'Ошибка создания 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	= CASE	WHEN xmlns LIKE '%/'
						THEN xmlns       + method
						ELSE xmlns + '/' + method
						END
			,@Request	= (
		SELECT	 @@Header	AS [soap:Header]
			,@@Body		AS [soap:Body]
		FOR	XML Path('soap:Envelope'),Type)
		FROM	(SELECT	 @@Body.value('namespace-uri(/*[1])','SysName')
				,@@Body.value('local-name(/*[1])'   ,'SysName')) S(xmlns,method)
		-- Установка 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
			-- Длина ответа, лучше не делать так - нестабильные баги (говно код)
			EXEC @ErrCode = sys.sp_OAMethod @OLEHTTP ,'getResponseHeader' ,@Length OUT ,'Content-Length'			IF (@ErrCode !=  0 ) BEGIN SET @ErrMethod = 'getResponseHeader'	GOTO HTTPError END
			IF (@Length >  4000 ) BEGIN	-- Не умещается в переменную
				DECLARE	@TResponse TABLE (Response NVarChar(max))
				SET TEXTSIZE  2147483647 ;-- Используем глючный вариант
				INSERT @TResponse
				EXEC @ErrCode = sys.sp_OAGetProperty @OLEHTTP ,'responseText'						IF (@ErrCode !=  0 ) BEGIN SET @ErrMethod = 'responseText'	GOTO HTTPError END
				SELECT @Response = Convert(XML,Stuff(Response    , 1 ,IsNull(NullIf(CharIndex('?>',Response    ), 0 )+ 1 , 0 ),'')) FROM @TResponse
			END ELSE BEGIN			-- Умещается в переменную
				EXEC @ErrCode = sys.sp_OAGetProperty @OLEHTTP ,'responseText' ,@ErrDescript OUT				IF (@ErrCode !=  0 ) BEGIN SET @ErrMethod = 'responseText'	GOTO HTTPError END
				SELECT @Response = Convert(XML,Stuff(@ErrDescript, 1 ,IsNull(NullIf(CharIndex('?>',@ErrDescript), 0 )+ 1 , 0 ),''))
			END
			-- Парсирование 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	 @@Header	= R.Response.query('/soap:Envelope/soap:Header/node()')
				,@@Body		= R.Response.query('/soap:Envelope/soap:Body/node()')
			FROM	(SELECT @Response)R(Response)
				-- Парсирование SOAP ошибки
		IF (@HTTPStatus =  500 )
			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	= Coalesce(
						  B.Body.value('(/soap:Fault/faultactor)[1]'	,'SysName')
						 ,B.Body.value('(/soap:Fault/faultcode)[1]'	,'SysName')
						 ,'soap:Server')
				,@ErrDescript	= IsNull(
						  B.Body.value('(/soap:Fault/faultstring)[1]'	,'NVarChar(4000)')
						+ IsNull(
						  B.Body.value('(/soap:Fault/detail)[1]'	,'NVarChar(4000)')
						 ,''),'Unknown Error')
			FROM	(SELECT @@Body)	  B(Body)
		END ELSE
			SELECT	 @ErrMethod	= 'send'
				,@ErrSource	= 'spSOAPMethod'
				,@ErrDescript	= 'Ошибочный статус HTTP ответа "' + Convert(VarChar,@HTTPStatus) + '"'
		-- Уничтожение HTTPRequest
		GOTO HTTPDestroy
		HTTPError:	EXEC @ErrCode = sys.sp_OAGetErrorInfo @OLEHTTP ,@ErrSource OUT ,@ErrDescript OUT
		HTTPDestroy:	EXEC @ErrCode = sys.sp_OADestroy @OLEHTTP
	END
	-- Вывод ошибок
	IF (@ErrSource IS NOT NULL)
		IF (@@OutError =  1 ) BEGIN
			SELECT	 @@Header	= (SELECT @ErrSource	FOR XML Path(''),Type)
				,@@Body		= (SELECT @ErrDescript	FOR XML Path(''),Type)
			RETURN	 1 
		END ELSE BEGIN
			RAISERROR('Ошибка при выполнении метода "%s" в "%s": %s', 18 , 1 ,@ErrMethod,@ErrSource,@ErrDescript)
			RETURN	@@Error
		END
	ELSE	RETURN	 0 ;
END
GO
Можно ещё сэкономить на спичках.
...
Рейтинг: 0 / 0
09.06.2011, 16:03
    #37302796
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
Дополнительная проверка ответа:
spSOAPMethodCall
Код: 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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
ALTER PROCEDURE [dbo].[spSOAPMethodCall] (
	 @@URL		SysName
	,@@Header	XML	= NULL	OUTPUT
	,@@Body		XML	= NULL	OUTPUT
	,@@TimeOut	Int	=  900000 
	,@@OutError	Bit	=  0 
) WITH EXECUTE AS 'dbo' AS BEGIN
	-- Для установки Proxy воспользуйтесь "proxycfg -u"
	DECLARE	 @OLEHTTP	Int
		,@HTTPStatus	Int
		,@ErrCode	Int
		,@ErrMethod	SysName
		,@ErrSource	SysName
		,@ErrDescript	NVarChar( 4000 )
		,@SOAPAction	SysName
		,@Length	Int
		,@Request	XML
		,@Response	XML

	-- OLE HTTPRequest
	EXEC @ErrCode = sys.sp_OACreate 'MSXML2.ServerXMLHTTP' ,@OLEHTTP OUT
	IF (@ErrCode !=  0 )
		SELECT	 @ErrMethod	= 'sp_OACreate'
			,@ErrSource	= 'MSXML2.ServerXMLHTTP'
			,@ErrDescript	= 'Ошибка создания 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	= CASE	WHEN xmlns LIKE '%/'
						THEN xmlns       + method
						ELSE xmlns + '/' + method
						END
			,@Request	= (
		SELECT	 @@Header	AS [soap:Header]
			,@@Body		AS [soap:Body]
		FOR	XML Path('soap:Envelope'),Type)
		FROM	(SELECT	 @@Body.value('namespace-uri(/*[1])','SysName')
				,@@Body.value('local-name(/*[1])'   ,'SysName')) S(xmlns,method)
		-- Установка 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_OAMethod @OLEHTTP ,'getResponseHeader' ,@ErrDescript	OUT ,'Content-Type'			IF (@ErrCode !=  0 ) BEGIN SET @ErrMethod = 'getResponseHeader'	GOTO HTTPError END
		EXEC @ErrCode = sys.sp_OAMethod @OLEHTTP ,'getResponseHeader' ,@Length		OUT ,'Content-Length'			IF (@ErrCode !=  0 ) BEGIN SET @ErrMethod = 'getResponseHeader'	GOTO HTTPError END
		EXEC @ErrCode = sys.sp_OAGetProperty @OLEHTTP ,'status' ,@HTTPStatus OUT						IF (@ErrCode !=  0 ) BEGIN SET @ErrMethod = 'status'		GOTO HTTPError END
		IF (@HTTPStatus IN ( 200 , 500 )) AND (@ErrDescript = 'text/xml; charset=utf-8') BEGIN
			IF (@Length >  4000 ) BEGIN	-- Не умещается в переменную
				DECLARE	@TResponse TABLE (Response NVarChar(max))
				SET TEXTSIZE  2147483647 ;-- Используем глючный вариант
				INSERT @TResponse
				EXEC @ErrCode = sys.sp_OAGetProperty @OLEHTTP ,'responseText'						IF (@ErrCode !=  0 ) BEGIN SET @ErrMethod = 'responseText'	GOTO HTTPError END
				SELECT @Response = Convert(XML,Stuff(Response    , 1 ,IsNull(NullIf(CharIndex('?>',Response    ), 0 )+ 1 , 0 ),'')) FROM @TResponse
			END ELSE BEGIN			-- Умещается в переменную
				EXEC @ErrCode = sys.sp_OAGetProperty @OLEHTTP ,'responseText' ,@ErrDescript OUT				IF (@ErrCode !=  0 ) BEGIN SET @ErrMethod = 'responseText'	GOTO HTTPError END
				SELECT @Response = Convert(XML,Stuff(@ErrDescript, 1 ,IsNull(NullIf(CharIndex('?>',@ErrDescript), 0 )+ 1 , 0 ),''))
			END
			-- Парсирование 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	 @@Header	= R.Response.query('/soap:Envelope/soap:Header/node()')
				,@@Body		= R.Response.query('/soap:Envelope/soap:Body/node()')
			FROM	(SELECT @Response)R(Response)
				-- Парсирование SOAP ошибки
		IF (@HTTPStatus =  500 )
			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	= Coalesce(
						  B.Body.value('(/soap:Fault/faultactor)[1]'	,'SysName')
						 ,B.Body.value('(/soap:Fault/faultcode)[1]'	,'SysName')
						 ,'soap:Server')
				,@ErrDescript	= IsNull(
						  B.Body.value('(/soap:Fault/faultstring)[1]'	,'NVarChar(4000)')
						+ IsNull(
						  B.Body.value('(/soap:Fault/detail)[1]'	,'NVarChar(4000)')
						 ,''),'Unknown Error')
			FROM	(SELECT @@Body)	  B(Body)
		END ELSE
			SELECT	 @ErrMethod	= 'send'
				,@ErrSource	= 'soap:Client'
				,@ErrDescript	= 'Сервер недоступен (' + Convert(VarChar,@HTTPStatus) + ': ' + @ErrDescript + ')'
		-- Уничтожение HTTPRequest
		GOTO HTTPDestroy
		HTTPError:	EXEC @ErrCode = sys.sp_OAGetErrorInfo @OLEHTTP ,@ErrSource OUT ,@ErrDescript OUT
		HTTPDestroy:	EXEC @ErrCode = sys.sp_OADestroy @OLEHTTP
	END
	-- Вывод ошибок
	IF (@ErrSource IS NOT NULL)
		IF (@@OutError =  1 ) BEGIN
			SELECT	 @@Header	= (SELECT @ErrSource	FOR XML Path(''),Type)
				,@@Body		= (SELECT @ErrDescript	FOR XML Path(''),Type)
			RETURN	 1 
		END ELSE BEGIN
			RAISERROR('Ошибка при выполнении метода "%s" (%s): %s', 18 , 1 ,@ErrMethod,@ErrSource,@ErrDescript)
			RETURN	@@Error
		END
	ELSE	RETURN	 0 ;
END
GO
...
Рейтинг: 0 / 0
21.11.2011, 12:52
    #37536622
Ворон743
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
Коллеги, а что делать, если веб-сервис возвращает не xml, а html с кодировкой windows-1251 (http-equiv="Content-Type" content="text/html; charset=windows-1251")? Как его обработать?
...
Рейтинг: 0 / 0
21.11.2011, 14:10
    #37536859
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
Ворон743 , там не даром стоит
Код: plaintext
ErrDescript = 'text/xml; charset=utf-8'
Вы то сами зайдите через брузер и воотчию убедитесь что WS лежит.

А SOAP протокол основан на XML. Может у нас не Web сервис, а просто HTTP запрос (POST/GET)?
...
Рейтинг: 0 / 0
21.11.2011, 14:12
    #37536864
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
MniorА SOAP протокол основан на XML. Может у в ас не Web сервис, а просто HTTP запрос (POST/GET)?
...
Рейтинг: 0 / 0
16.07.2012, 11:47
    #37880400
juwdoks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
Сейчас есть решения для SOAP и REST, а для XML-RPC есть какие-то примеры? Как с таким вебсервисом поработать напрямую из кода TSQL? Через clr?
...
Рейтинг: 0 / 0
16.07.2012, 13:17
    #37880530
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
Поменять десять строк, делов-то. Спеки то есть. Даже у Вики есть страничка .

Или вы не хотите включить голову и понять смысл вышеописанного кода?
...
Рейтинг: 0 / 0
16.07.2012, 13:40
    #37880556
juwdoks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
Mnior,

Как всегда, не в бровь, а в глаз :)
И на том спасибо, допилю как подсказано.
...
Рейтинг: 0 / 0
17.07.2012, 10:03
    #37881715
juwdoks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
Не могу понять что не так: открываю соединение, объявляю Content-Type, отправляю запрос, но все время получаю ответ, что мой xml с параметрами неправильный.
Проверял через форму - если тот же xml запроса отправить просто post_ом, то все хорошо, а от MSSQL этот запрос доходит до скрипта без строки <?xml version="1.0" encoding="UTF-8"?> - на что и ругается вебсервис (похоже).
Проблема в XML declaration - как заставить MSSQL не убирать его из запроса, даже если version="1.0"?
...
Рейтинг: 0 / 0
17.07.2012, 11:37
    #37881900
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
juwdoks , согласен, тотальное большинство не знают что такое XML декларация и для чего она.
Кстати, тот сервер, который вы используете писали и...ты. Кодировка текстового потока задаётся в заголовках. Этого достаточно.
Когда же уже вытестится эта "проблема".

juwdoks , в XML нет никаких заголовков, они есть в средствах хранения и передачи данных.
Если их серевер настолько туп, то передавайте строку с дополненной шапкой, а не XML структуру.
...
Рейтинг: 0 / 0
17.07.2012, 11:40
    #37881907
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
MniorКогда же уже вытеснится эта "проблема" сдравым кодом.Хотя чё я, там же допотопный XML-RPC. Другого и ждать нечего.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
03.11.2014, 12:09
    #38794559
juwdoks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
Под 2012 даёт ошибку:
Ошибка при выполнении метода "send" (msxml3.dll): Параметр задан неверно.

Причём формат методов объекта MSXML2.ServerXMLHTTP вроде не менялся ((
Кто-то сталкивался? В инете нарыл пару аналогичных жалоб, но решения нет, чтоб его.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
21.11.2017, 14:48
    #39556913
Sandist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
juwdoks,

та же беда. Мне нужно то же на 2014 сервере. Кто вообще этим пользуется? или может что новое есть для решение таких задач в 2014 скуле?
...
Рейтинг: 0 / 0
21.11.2017, 15:02
    #39556930
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
Sandist,

нормальные люди пишут трехслойку в таких случаях, а прочие - CLR процедуры.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
05.04.2021, 14:18
    #40059798
newbie876454
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
Владислав Колосов,

что за трехслойка?
Подскажите, как по уму сделать веб сервисы к SQL Server.
Нужна отправка в обе стороны.
А то нарыл такую фразу:
"Перепиши на .Net этот код, сделай Dll и подключи к MS SQL через "CREATE ACCEMBLY". Когда у тебя база задедосит WEB сервер, перепишеш на использование SERVICE BROKER; а когда CLR сожрёт всю оперативу перенесёшь на отдельный сервак.
А ПРО MSXML2.XMLHTTP и sp_OACreate ЗАБУДЬ!"

И захотел сделать правильно.
Только не для SQL Server 2000, а для более актуальной версии: SQL Server 2017.
...
Рейтинг: 0 / 0
05.04.2021, 16:37
    #40059919
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коннектор к веб-службам. MS SQL 2000
newbie876454,

имеется в виду трехуровневая архитектура model-view-controller.
https://ru.wikipedia.org/wiki/Model-View-Controller.

При такой архитектуре контроллер выполняет роль диспетчера данных, view - веб-интерфейс (SOAP, REST и тому подобные) или приложение Windows, модель - база данных, обеспечивающая целостность декларативную и процедурную и доступность (резервные копии, репликация и так далее).

В случае необходимости "вызвать веб-службу" этим занимается контроллер, который может выполнить функцию как автоматически, так и по запросу пользователя.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Коннектор к веб-службам. MS SQL 2000 / 24 сообщений из 24, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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