MartyConnelly
martyconnelly at shaw.ca
Wed Jul 20 12:29:02 CDT 2005
Well I know it can be done, using WSE 2.0 (3.0 is out) and extended
stored procedures.
I believe doing it this way may cause security headaches. But if you are
just returning one variable
from an internal site maybe okay.
These guys have a Beta ESP they are trying to sell, it is attempting to
be generic and requires a dll
WebService Extended Stored Procedure for SQL Server 2000
http://www.rdlcomponents.com/EXSP/default.aspx
I believe there maybe an easier way in SQL Server 2005 with the CLR
Also you could try using SQLXML and SOAP
: Using Extended Stored Procedures or SP_OA Stored Procedures to Load
CLR in SQL Server Is Not Supported
http://support.microsoft.com/default.aspx?scid=kb;en-us;322884
This may work for you.
If you want to hit a webservice, you should use the sp_oa* stored
procedures
to invoke MSXML2.XMLServerHTTP, and communicate with the webservice that
way.
Make sure MSXML parser version 3 or greater is installed on your SQLServer
server (it's installed with IE6 so if you have that, you're good to go).
In sql create the following stored procedure.
create procedure http_get( @sUrl varchar(200), @response varchar(8000) out)
As
Declare
@obj int
, at hr int
, at status int
, at msg varchar(255)
exec @hr = sp_OACreate 'MSXML2.ServerXMLHttp', @obj OUT
if @hr < 0 begin Raiserror('sp_OACreate MSXML2.ServerXMLHttp failed',
16,
1) return end
exec @hr = sp_OAMethod @obj, 'Open', NULL, 'GET', @sUrl, false
if @hr <0 begin set @msg = 'sp_OAMethod Open failed' goto eh end
exec @hr = sp_OAMethod @obj, 'send'
if @hr <0 begin set @msg = 'sp_OAMethod Send failed' goto eh end
exec @hr = sp_OAGetProperty @obj, 'status', @status OUT
if @hr <0 begin set @msg = 'sp_OAMethod read status failed' goto eh end
if @status <> 200 begin set @msg = 'sp_OAMethod http status ' +
str(@status) goto eh end
exec @hr = sp_OAGetProperty @obj, 'responseText', @response OUT
if @hr <0 begin set @msg = 'sp_OAMethod read response failed' goto eh
end
exec @hr = sp_OADestroy @obj
return
eh:
exec @hr = sp_OADestroy @obj
Raiserror(@msg, 16, 1)
return
go
then run this
declare @resp varchar(8000)
exec http_get
'http://[webserver]/[virtualDirectory]/HelloWorld.asmx/Hello?Name=david',
@resp out
print @resp
Francisco Tapia wrote:
>In the middle of a design discussion for a system that is in development, it
>was brought up if I could just call a webservice from a stored procedure.
>That's my real question can it? Initially I figured that the website for
>this system would take an order in, and submit the order to sql server, an
>inhouse person would review the order and upon it's approval click the
>approve button and allow the order to be submitted to the enterprise
>database. Because the Sales Order number needs to be stored on the sql
>server for refernce, I figured it would be easiest to have the inhouse
>application call the stored procedure, and let the server go and talk to the
>webservice and retreive the "Sales Order". If this cannot be done, then I'll
>need to take all the data at the client side submit it and take the
>resulting Sales Order and submit it to the sql server, giving it plenty of
>room for errors due to network interuptions (rare I know, but sometimes not
>quite)... Has anyone ever had to do this?
>
>Thanks,
>
>
>
--
Marty Connelly
Victoria, B.C.
Canada