Hola,
Soy nuevo aqui. Espero que este sea el foro adecuado para este tema. Estoy haciendo un servicio web en C# con Visual Studio y un cliente en eVC++ para un Pocket PC. Utilizo PocketSoap en el cliente para crear peticiones SOAP en el cliente y enviarlas al servicio web. Las peticiones llegan al servicio, parece que correctamente, porque el método apropiado se ejecuta, pero los parámetros que llegan siempre son nulos (o 0 si es u entero, por ejemplo). He capturado y examinado los paquetes SOAP que envía, y los parámetros están ahí, con sus valores correctos, pero al ejecutarse el método son siempre nulos. Si pruebo el servicio con el formulario de prueba HTT POST funciona correctamente. Por más vueltas que le doy no consigo encontrar el problema. Este es el código
WEB SERVICE
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
namespace WebService1
{
/// <summary>
/// Descripción breve de Service1.
/// </summary>
[WebService(Namespace="http://tempuri.org/test1/Service1")]
public class Service1 : System.Web.Services.WebService
{
public Service1()
{
//CODEGEN: llamada necesaria para el Diseñador de servicios Web ASP .NET
InitializeComponent();
}
[WebMethod]
public string testMethod(int param)
{
string s = "Result " + param;
return s;
}
}
}
CLIENT (eVC++)
BOOL callWebService()
{
CComVariant resVal ;
CComPtr<ISOAPNode> prm ;
CComPtr<IHTTPTransportAdv> pt ;
CComBSTR req ;
CComPtr<ISOAPNodes> params ;
CComPtr<ISOAPEnvelope> penv ;
HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED );
int x = 5;
_HR( CoCreateInstance(__uuidof(CoEnvelope), NULL, CLSCTX_INPROC, __uuidof(ISOAPEnvelope),(void **)&penv ) );
_HR( penv->put_MethodName ( CComBSTR(OLESTR("testMethod")) ) );
_HR( penv->put_URI ( CComBSTR(OLESTR("http://tempuri.org/test1/Service1/")) ) );
_HR( penv->get_Parameters(¶ms) );
_HR( params->Create ( CComBSTR(OLESTR("param")), CComVariant(x), NULL, NULL, NULL, NULL ) ) ;
_HR( penv->Serialize(&req) );
_HR( pt.CoCreateInstance( __uuidof(HTTPTransport) ) );
_HR( pt->put_SOAPAction( CComBSTR(OLESTR("http://tempuri.org/testMethod"))) );
_HR( pt->Send ( CComBSTR(OLESTR("http://host:port/test1/Service1.asmx")), req ) );
req.Empty() ;
_HR( penv->Parse(CComVariant(pt), NULL) ) ;
params.Release() ;
_HR( penv->get_Parameters(¶ms) ) ;
_HR( params->get_Item(0, &prm) ) ;
_HR( prm->get_Value(&resVal) ) ;
resVal.ChangeType(VT_BSTR) ;
AfxMessageBox(CString (resVal.bstrVal),MB_OK);
}