在sql server中调用Web服务

Ala*_*lan 5 c# sql-server web-services asmx

我有一个使用以下方法的Web服务(c#):

    [WebMethod]
    public string HelloWorld1(string a)
    {
        return "Hello World - " + a.ToString();
    }

    [WebMethod]
    public string HelloWorld2()
    {
        return "Hello World";
    }
Run Code Online (Sandbox Code Playgroud)

我试图在sql-server程序中使用它与以下代码:

...

-- URL 1
set @url = 'http://localhost/ws/ws1.asmx/HelloWorld2'

-- URL 2
--set @url = 'http://localhost/ws/ws1.asmx/HelloWorld1?a=amama'

EXEC msdb.dbo.sp_OACreate 'MSXML2.XMLHTTP', @OBJ OUT    
EXEC msdb.dbo.sp_OAMethod @OBJ, 'Open', NULL, 'post', @URL , false
EXEC msdb.dbo.sp_OAMethod @OBJ, 'send'
EXEC msdb.dbo.sp_OAGetProperty @OBJ, 'responseText', @RESPONSE OUT
SELECT @RESPONSE [response]
EXEC msdb.dbo.sp_OADestroy @OBJ
Run Code Online (Sandbox Code Playgroud)

当我使用第一个URL 1时,我得到了所需的响应.但是当我使用URL 2时,会显示以下错误:

 System.InvalidOperationException: Request format is invalid .
   em System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
   em System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()
Run Code Online (Sandbox Code Playgroud)

你能告诉我有什么问题吗?

chr*_*dam 2

当使用sp_OAMethoduse 该GET方法并作为增强功能时,您可以尝试参数化存储过程,如下所示:

CREATE PROCEDURE [dbo].[sp_CallWebService]
@Param varchar(20) = NULL

AS
    DECLARE @obj INT
    DECLARE @sUrl VARCHAR(200)
    DECLARE @response VARCHAR(8000)

    SET @sUrl = 'http://localhost/ws/ws1.asmx/HelloWorld1?a='+ @Param +''

    EXEC sp_OACreate 'MSXML2.ServerXMLHttp', @obj OUT    
    EXEC sp_OAMethod @obj, 'Open', NULL, 'GET', @sUrl , false
    EXEC sp_OAMethod @obj, 'send'
    EXEC sp_OAGetProperty @obj, 'responseText', @response OUT

    SELECT @response [response]
    EXEC sp_OADestroy @obj

RETURN
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用提供的参数执行存储过程:

EXEC [dbo].[sp_CallWebService] 'amana'
Run Code Online (Sandbox Code Playgroud)