Roozbeh Amiressami Ответов: 4

Почему моя веб-служба SQL всегда возвращает null?


Веб-служба:
public class MyWebService : System.Web.Services.WebService
{
    public MyWebService()
    {
}

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

Хранимая процедура:
CREATE PROC Hello

AS
    DECLARE @obj AS INT
    DECLARE @Uri AS NVARCHAR(MAX)
    DECLARE @Response AS BIT


    SET @Uri = 'http://MY IP IS HERE :9671/MyWebService.asmx/HelloWorld'
    EXEC sp_OACreate 'MSXML2.ServerXMLHttp.3.0', @obj OUT
    EXEC sp_OAMethod @obj, 'open', NULL, 'POST', @Uri, false
    EXEC sp_OAGetProperty @obj, 'ResponseText', @Response OUTPUT

    SELECT @Response [response]
    EXEC sp_OADestroy @obj

RETURN

Исполняя его вот так:
EXEC Hello


Выходные данные после вызова хранимой процедуры всегда равны нулю, но я хочу установить возвращаемое значение веб-службы в качестве выходных данных. (Моя среда CLR SQL SERVER 2012 включена)

Suvabrata Roy

Я думаю, что sp_OACreate не может создать объект

Попробуйте этот код

msxml2 описывается @ч=процедуры sp_oacreate '.Для serverxmlhttp.3.0', @obj-файлы из
Если @hr <> 0
НАЧАТЬ
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
raiserror('ошибка создания COM-компонента 0x%x, %s, %s',16,1, @hr, @src, @desc)
ВЕРНУТЬ
КОНЕЦ;

Roozbeh Amiressami

когда я отслеживаю ваш код, если условие никогда не истинно, и я получил этот xml-код, и я думаю, что @hr всегда равен нулю.

вы можете мне объяснить?

<!--?xml version="1.0" encoding="utf-8"?-->
<string xmlns="http://www.webserviceX.NET/"><StockQuotes><Stock><Symbol>MSFT</Symbol><Last>45.09</Last><Date>9/2/2014</Date><Time>4:15pm</Time><Change>-0.34</Change><Open>45.43</Open><High>45.46</High><Low>44.85</Low><Volume>22976776</Volume><MktCap>371.5B</MktCap><PreviousClose>45.43</PreviousClose><PercentageChange>-0.75%</PercentageChange><AnnRange>30.95 - 45.71</AnnRange><Earns>2.63</Earns><P-E>17.27</P-E><Name>Microsoft Corpora</Name></Stock></StockQuotes>

Suvabrata Roy

Это ответ вашего веб-сервиса ?

Roozbeh Amiressami

да

Suvabrata Roy

Ваш код и выходные данные не совпадают поэтому пожалуйста проверьте ваш сервис URL и название операции

Nitin S

http://MY IP здесь:9671
Правильно ли вы развернули свой веб-сервис? вы пробовали получить доступ к нему через веб-браузер?

Roozbeh Amiressami

привет Мой ip-это действительный IP-адрес на выделенном сервере в интернете
да, я действительно попробовал это, и я получил xml-строку "HelloWord" в браузере бота, когда я ecec мой proc результат sql всегда равен нулю

Kornfeld Eliyahu Peter

Если вы откроете свой URL - адрес ... http://MY IP находится здесь :9671/MyWebService.asmx/HelloWorld - в браузере, что вы получаете?

Roozbeh Amiressami

это значение:
(Я удалил некоторые знаки тегов, чтобы кодировать проект, а не преобразовывать его в тег)
!--?xml version="1.0" encoding="UTF-8"?->
строка xmlns="http://tempuri.org/">Hello World /string

Kornfeld Eliyahu Peter

Это хорошо...сейчас. Можете ли вы запустить свой SP построчно, чтобы увидеть все возможные ошибки, которые у вас могут быть?

Roozbeh Amiressami

Я не мог найти никакой ошибки в моем SP
вы можете отследить его для меня?

Kornfeld Eliyahu Peter

Нет. Пожалуйста,не ищите ошибок в SP, а запускайте его содержимое построчно...

Roozbeh Amiressami

хорошо дорогая
Я сделала это @ч-от 0 до конца
@object получил значение 16711422
но @Response никогда не получал значения в командной строке 9
(EXEC sp_OAGetProperty @obj, 'Response', @Response OUTPUT)
Exec @hr=sp_OACreate 'MSXML2.XMLHTTP', @Object OUT

Roozbeh Amiressami

Большое вам спасибо вы помогли мне когда я был в очень плохой ситуации

Я очень сожалею об этом, но можете ли вы увидеть мою другую проблему в этой проблеме?

http://www.codeproject.com/Questions/814699/Why-My-Webservice-Trow-Eeption-When-I-Execute-My-S


4 Ответов

Рейтинг:
34

Kornfeld Eliyahu Peter

Теперь я понимаю...
Вы никогда не посылаете свою команду в службу... (И это должно быть GET, а не POST, Я думаю)...
А вот и ИП...

CREATE PROC Hello
AS
    DECLARE @obj AS INT
    DECLARE @Uri AS NVARCHAR(MAX)
    DECLARE @Response AS BIT
 

    SET @Uri = 'http://MY IP IS HERE :9671/MyWebService.asmx/HelloWorld'
    EXEC sp_OACreate 'MSXML2.ServerXMLHttp.3.0', @obj OUT
    EXEC sp_OAMethod @obj, 'open', NULL, 'POST', @Uri, false
    EXEC sp_OAMethod @obj, 'send'
    EXEC sp_OAGetProperty @obj, 'ResponseText', @Response OUTPUT
 
    SELECT @Response [response]
    EXEC sp_OADestroy @obj
 
RETURN


Рейтинг:
2

EtcetDev

Сегодня я столкнулся с той же проблемой.

Понятно, что без поста Питера и добавления метода отправки нет большой надежды, что он работает.

Но этого недостаточно.

Вам нужно заменить это : объявить @Uri как NVARCHAR(MAX)
с помощью : объявить @Uri как NVARCHAR(4000)

4000-Это основное ограничение объекта.
Если вы не измените MAX на 4000, то все равно получите нулевое значение.

Мой контекст : W10 / SQL SERVER 2016


CHill60

Неужели? Вздор!

Рейтинг:
2

Châu Minh Hùng

I think you can do the following:
replace                         DECLARE @Response AS BIT  
by                              DECLARE @Response VARCHAR(8000)


ALTER PROC Hello
AS
    DECLARE @obj AS INT
    DECLARE @Uri AS NVARCHAR(MAX)
    DECLARE @Response VARCHAR(8000)
 

    SET @Uri = 'http://localhost:51017/WebService.asmx?op=HelloWorld'
    EXEC sp_OACreate 'MSXML2.ServerXMLHttp.3.0', @obj OUT
    EXEC sp_OAMethod @obj, 'open', NULL, 'POST', @Uri, false
    EXEC sp_OAMethod @obj, 'send'
    EXEC sp_OAGetProperty @obj, 'ResponseText', @Response OUTPUT
 
    SELECT @Response [response]
    EXEC sp_OADestroy @obj
 
RETURN

GO


CHill60

По сути, то же самое, что и Решение 1, опубликованное более 4 лет назад.
Придерживайтесь ответов на новые сообщения, где ОП все еще нуждается в помощи, и убедитесь, что вы привносите что-то новое в поток

Рейтинг:
1

yaman2222

если вы хотите выполнить asmx на sql server, пожалуйста, проверьте свой URL-адрес. Потому что "чувствителен к регистру"
url-ссылка на sql server. (Верхний регистр-нижний регистр)


Richard Deeming

Спрашивали, отвечали и решали снова. ТРИ ГОДА НАЗАД.

И твой ответ-полная чушь. URL-адреса в Windows не чувствительны к регистру.