Problemas con SOAP

08/03/2007 - 13:29 por Jonix | Informe spam
Hola,

Vereis, tengo un problema. He creado un WebService muy simple que por medio
de cabeceras soap le paso un usuario y password, y por parámetro del
webservice le indico un saludo. La cuestión es que el webservice recoge este
parámetro y lo introduce en un dataset que es retornado a la aplicación
winforms que la consume.
La aplicación Winforms, una vez recibe el dataset realiza un writexml a un
fichero.
El problema es que cuando consulto este fichero, el esquema que me aparece
no es soap. El código que uso en el webservice es el siguiente:

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;

public class LogInfo : SoapHeader
{
public string Username;
public string Password;
}

[WebService(Namespace = "http://www.mynamespace.domain/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WSEtiquetas : System.Web.Services.WebService
{
public WSEtiquetas () {

//Eliminar la marca de comentario de la línea siguiente si utiliza
los componentes diseñados
//InitializeComponent();
}

public LogInfo sSoapHeader;

[WebMethod]
[SoapHeader("sSoapHeader")]
public DataSet HelloWorld(string sMensaje) {
DataSet ds = new DataSet();
DataTable dt = new DataTable();
dt.Columns.Add("Mensaje");
dt.Columns.Add("Warnning");
DataRow dr = dt.NewRow();
dr[0] = sMensaje;
dr[1] = "Error";
if (sSoapHeader == null)
{
dr[0] = sSoapHeader.Username;
dr[1] = sSoapHeader.Password;
}
dt.Rows.Add(dr);
ds.Tables.Add(dt);
return ds;
}
}

Y la aplicación windows:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace ConsumidorWS
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
WS.WSEtiquetas WSE = new ConsumidorWS.WS.WSEtiquetas();
WS.LogInfo LogI = new ConsumidorWS.WS.LogInfo();

LogI.Username = "UName";
LogI.Password = "PSW";
WSE.LogInfoValue = LogI;
WSE.SoapVersion =
System.Web.Services.Protocols.SoapProtocolVersion.Soap12;
DataSet ds = WSE.HelloWorld("Hola Mundo");
ds.WriteXml("C:\\hola.xml",XmlWriteMode.WriteSchema);
}
}
}

El esquema resultante en el fichero es:

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<xs:schema id="NewDataSet" xmlns=""
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true"
msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Table1">
<xs:complexType>
<xs:sequence>
<xs:element name="Mensaje" type="xs:string" minOccurs="0" />
<xs:element name="Warnning" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<Table1>
<Mensaje>Hola Mundo</Mensaje>
<Warnning>Error</Warnning>
</Table1>
</NewDataSet>



Cuando debería ser algo como:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/env...">
<soap:Header>
<LogInfo xmlns="http://www.mynamespace.domain/">
<Username>UName</Username>
<Password>PWD</Password>
</LogInfo>
</soap:Header>
<soap:Body>
...


o eso creo.

Gracias y espero no haberme enrollado demasiado.

Preguntas similare

Leer las respuestas

#1 Ronald Ricardo Ramirez Moran
08/03/2007 - 19:58 | Informe spam
Yo creo que estas confundido, creo que muy confundido. Porque estas
escribiendo el contenido XML resultante de un objeto [[DataSet]], que segun
lo que pude ver es el valor de retorno de la operacion (webmethod) que
invocaste al Servicio Web. Y no contiene en si los datos del mensaje SOAP,
pues es un objeto de retorno ya deserializado!.

Saludos

"Jonix" wrote in message
news:
Hola,

Vereis, tengo un problema. He creado un WebService muy simple que por
medio
de cabeceras soap le paso un usuario y password, y por parámetro del
webservice le indico un saludo. La cuestión es que el webservice recoge
este
parámetro y lo introduce en un dataset que es retornado a la aplicación
winforms que la consume.
La aplicación Winforms, una vez recibe el dataset realiza un writexml a un
fichero.
El problema es que cuando consulto este fichero, el esquema que me aparece
no es soap. El código que uso en el webservice es el siguiente:

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;

public class LogInfo : SoapHeader
{
public string Username;
public string Password;
}

[WebService(Namespace = "http://www.mynamespace.domain/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WSEtiquetas : System.Web.Services.WebService
{
public WSEtiquetas () {

//Eliminar la marca de comentario de la línea siguiente si utiliza
los componentes diseñados
//InitializeComponent();
}

public LogInfo sSoapHeader;

[WebMethod]
[SoapHeader("sSoapHeader")]
public DataSet HelloWorld(string sMensaje) {
DataSet ds = new DataSet();
DataTable dt = new DataTable();
dt.Columns.Add("Mensaje");
dt.Columns.Add("Warnning");
DataRow dr = dt.NewRow();
dr[0] = sMensaje;
dr[1] = "Error";
if (sSoapHeader == null)
{
dr[0] = sSoapHeader.Username;
dr[1] = sSoapHeader.Password;
}
dt.Rows.Add(dr);
ds.Tables.Add(dt);
return ds;
}
}

Y la aplicación windows:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace ConsumidorWS
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
WS.WSEtiquetas WSE = new ConsumidorWS.WS.WSEtiquetas();
WS.LogInfo LogI = new ConsumidorWS.WS.LogInfo();

LogI.Username = "UName";
LogI.Password = "PSW";
WSE.LogInfoValue = LogI;
WSE.SoapVersion > System.Web.Services.Protocols.SoapProtocolVersion.Soap12;
DataSet ds = WSE.HelloWorld("Hola Mundo");
ds.WriteXml("C:\\hola.xml",XmlWriteMode.WriteSchema);
}
}
}

El esquema resultante en el fichero es:

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<xs:schema id="NewDataSet" xmlns=""
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true"
msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Table1">
<xs:complexType>
<xs:sequence>
<xs:element name="Mensaje" type="xs:string" minOccurs="0"
/>
<xs:element name="Warnning" type="xs:string" minOccurs="0"
/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<Table1>
<Mensaje>Hola Mundo</Mensaje>
<Warnning>Error</Warnning>
</Table1>
</NewDataSet>



Cuando debería ser algo como:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/env...">
<soap:Header>
<LogInfo xmlns="http://www.mynamespace.domain/">
<Username>UName</Username>
<Password>PWD</Password>
</LogInfo>
</soap:Header>
<soap:Body>
...


o eso creo.

Gracias y espero no haberme enrollado demasiado.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida