2010-08-05 17 views
23

Tengo un informe SSRS 2005 que me gustaría utilizar un servicio web para recuperar algunos datos. Este servicio web tendrá varios parámetros.SSRS 2005 - XML ​​conjunto de datos del servicio web - los parámetros no se pasan al servicio web

Como prueba He creado un muy simple proyecto de demostración de servicio web en mi entorno local:

[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; 
    } 
} 

Mi informe de la prueba tiene entonces un conjunto de datos utilizando una fuente de datos XML, con el (localhost) URL del servicio web en la cadena de conexión.

En la cadena de consulta del conjunto de datos que tengo lo siguiente, sobre la base de documentación de 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> 

El problema que estoy teniendo es que, a pesar del servicio web que se dispare, el parámetro no es pasar al servicio web y, en consecuencia, el valor de retorno es siempre 0. He depurado el servicio web y coloqué un punto de interrupción en el método DivideByTwo(), y cuando la llamada al servicio web se activa desde el informe y se llega al punto de interrupción, el valor numberIn siempre es 0 independientemente de lo que coloque en el elemento de Query XML.

También intenté especificar el parámetro "NumberIn" en la pestaña "Parámetros" del cuadro de diálogo Conjunto de datos (con un valor proporcionado) y eliminar el elemento de la consulta XML; el resultado es el mismo.

He encontrado algunas publicaciones en la web que describen el mismo problema pero no parecen encontrar una solución, y me he estado arrancando los pelos en las últimas horas. Cualquier ayuda sería muy apreciada.

+4

Tiene un pequeño error tipográfico. Como los parámetros son sensibles a las mayúsculas y minúsculas, su consulta debe ser . Estoy teniendo un problema similar con los parámetros que no se aprobaron, con todos los casos correctos ... no estoy seguro de que sea el problema, pero vale la pena intentarlo. – DavveK

+2

Gracias DaweK.Hace bastante tiempo que pregunté esto, pero sospecho que ese era el problema, ya que el problema parecía "desaparecer" después de un tiempo y no podía identificar qué había hecho para solucionar el problema. – Michael

Respuesta

1

Como mencionó DavveK, parece que se trata de un simple error de tipeo con la capitalización de su parámetro.

Su definición de servicio está buscando:

numberIn 

mientras que el conjunto de datos XML proporciona:

NumberIn 

Como el artículo al que hizo referencia menciona, Paramaters entre mayúsculas y minúsculas. Ver # 8 en http://msdn.microsoft.com/en-us/library/aa964129(SQL.90).aspx

0

Esto puede suceder debido a dos razones.

1) Los nombres de los parámetros no coinciden exactamente. Tenga en cuenta que los nombres de los parámetros distinguen entre mayúsculas y minúsculas.

2) El espacio de nombres no se corresponde correctamente. Tenga en cuenta que si especifica el espacio de nombre como "http://tempuri.org/" , asegúrese de que el carácter de barra diagonal posterior está en su definición de servicio web. P.ej.

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

} 

Si alguna de estas dos condiciones no se especifican correctamente, su método de servicio Web se llamará sin embargo, los parámetros (como DataTime, int) tendrán todos los valores por defecto.

Cuestiones relacionadas