Arhn - архитектура программирования

Передача параметра XML в хранимую процедуру через веб-службу ASMX

У меня есть хранимая процедура SQL Server 2005 с такой подписью:

CREATE PROCEDURE [dbo].[ProcTRequest] 
   @Pxml xml, @ClientCode varchar(10) 
AS
BEGIN
  ...
END

Мне поручено написать веб-службу .asmx, которая будет вызывать эту хранимую процедуру. Вот у меня блок.

Если параметр @Pxml указан как строка в веб-методе C#, мы получаем

Серверу не удалось обработать запрос.

Затем попробовал XmlText в качестве типа для @Pxml, что привело к

Серверу не удалось обработать запрос. Метод MyWebService.MyWebMethod не может быть отражен. Произошла ошибка, отражающая «PXml». ->; Произошла ошибка, отражающая тип «System.Xml.XmlText». -› System.Xml.XmlText нельзя использовать как: 'элемент xml'.

Как правильно вызвать эту хранимую процедуру из веб-метода С#? Обратите внимание, что параметр @Pxml всегда будет правильно сформированным XML.

Человек, который будет вызывать эту веб-службу, использует Curl в системе Unix.

Хотя требуется ASMX, если это можно реализовать через WCF, не могли бы вы показать мне, как это сделать с помощью фрагмента псевдокода? Я еще не знаком с WCF.

Пожалуйста помоги. Спасибо.

ОБНОВЛЕНИЕ: так я называю SP

 [WebMethod]
 public string GetRequestID(string PXml, string clientcode)
    {
        Database db = DatabaseFactory.CreateDatabase();
        using (IDataReader dr = db.ExecuteReader("ProcRequestID", PXml, clientcode))
        {
            return dr["RequestID"].ToString();
        }
    }

Ответы:


1

Не могли бы вы использовать строку в интерфейсе ASMX (чтобы вызывающая сторона отправляла вам строку), но внутри веб-службы ASMX вы определяете параметр @PXml в вызове хранимой процедуры как SqlDbType.Xml ? Я думаю, это должно сработать....

Что-то в духе:

[WebMethod]
public void MyWebMethod(string input, string clientCode)
{
        using (SqlConnection conn = new SqlConnection(your-connection-string-here))
        using (SqlCommand cmd = new SqlCommand("dbo.ProcTRequest", conn))
        {
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add("@Pxml", SqlDbType.Xml);
            cmd.Parameters.Add("@ClientCode", SqlDbType.VarChar, 10);

            cmd.Parameters["@Pxml"].Value = input;
            cmd.Parameters["@ClientCode"].Value = clientCode;

            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
        }
}

Поскольку вы просто вызываете хранимую процедуру и не ожидаете возврата результата, используйте ExecuteNonQuery вместо ExecuteReader.

Также жизненно важно: сообщите ADO.NET, что вы вызываете хранимую процедуру! Вот что делает эта строка:

            cmd.CommandType = CommandType.StoredProcedure;

В противном случае ADO.NET по умолчанию ожидает получить полный встроенный оператор SQL и может просто не иметь возможности проанализировать и выполнить это ....

14.11.2012
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..