Подтвердить что ты не робот

SSRS 2005 - набор данных XML webservice - параметры, которые не передаются в webservice

У меня есть отчет SSRS 2005, который я хотел бы использовать веб-сервис для получения некоторых данных. Этот веб-сервис будет принимать несколько параметров.

В качестве теста я создал очень простой демонстрационный веб-сервис в моей локальной среде:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
    public Service () {}

    [WebMethod]
    public int DivideByTwo(int numberIn) {
        return numberIn/2;
    }   
}

В моем тестовом отчете есть набор данных с использованием источника данных XML с URL-адресом (localhost) веб-службы в строке соединения.

В строке запроса набора данных у меня есть следующее, на основе документации MS (http://msdn.microsoft.com/en-us/library/aa964129(SQL.90).aspx):

<Query>
    <SoapAction>http://tempuri.org/DivideByTwo</SoapAction>
    <Method Namespace="http://tempuri.org/" Name="DivideByTwo" />
    <Parameters>
        <Parameter Name="NumberIn">
          <DefaultValue>100</DefaultValue>
        </Parameter>
    </Parameters>
    <ElementPath IgnoreNamespaces="True">*</ElementPath>
</Query>

Проблема, с которой я сталкиваюсь, заключается в том, что, несмотря на запуск веб-службы, этот параметр не передается веб-сервису, и поэтому возвращаемое значение всегда равно 0. Я отлаживал веб-сервис и размещал точку останова в DivideByTwo (), и когда вызов веб-службы запускается из отчета и ударяется точка останова, значение numberIn всегда равно 0 независимо от того, что я помещаю в элементе XML запроса.

Я также попытался указать параметр "NumberIn" на вкладке "Параметры" диалогового окна "Набор данных" (с предоставленным значением) и удалить элемент из запроса XML - результат будет таким же.

Я нашел несколько сообщений в Интернете, в которых излагалась одна и та же проблема, но, похоже, она не может найти решение и вырывала мои волосы за последние пару часов. Любая помощь будет высоко оценена.

4b9b3361

Ответ 1

Как упоминает DavveK, это выглядит как простая опечатка с капитализацией вашего параметра.

Определение вашего сервиса ищет:

numberIn

в то время как ваш XML DataSet обеспечивает:

numberIn

В статье, на которую вы ссылаетесь, упоминаются, параметрирование чувствительно к регистру. См. # 8 в http://msdn.microsoft.com/en-us/library/aa964129(SQL.90).aspx

Ответ 2

Это может произойти по двум причинам.

1) Имена параметров точно не совпадают. Обратите внимание, что имена параметров чувствительны к регистру.

2) Пространство имен неправильно согласовано. Обратите внимание: если вы укажете пространство имен как " http://tempuri.org/" , убедитесь, что в вашем определении веб-службы присутствует символ косой черты переднего конца. Например.

[WebService(Namespace = "http://tempuri.org/")]
public class ReportService : System.Web.Services.WebService
{

}

Если какое-либо из этих двух условий неверно указано, ваш метод веб-службы будет вызван, но параметры (например, datatime, int) будут иметь значения по умолчанию.