gpt4 book ai didi

c# - 在 sql server 中调用 Web 服务

转载 作者:太空狗 更新时间:2023-10-29 23:38:29 24 4
gpt4 key购买 nike

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

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

[WebMethod]
public string HelloWorld2()
{
return "Hello World";
}

我正在尝试使用以下代码在 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

当我使用第一个 URL 1 时,我得到了想要的响应。但是当我使用 URL 2 时,显示以下错误:

 System.InvalidOperationException: Request format is invalid .
em System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
em System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()

你能告诉我哪里出了问题吗?

最佳答案

在使用 sp_OAMethod 时,请使用 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

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

EXEC [dbo].[sp_CallWebService] 'amana'

关于c# - 在 sql server 中调用 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27660903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com