none
Servicio Web Dinamico RRS feed

  • Pregunta

  • Hola gente del Foro:

    Estoy realizando una aplicacion distribuida y estoy teniedo problemas al intentar mandar una clase al servidor mediante un servicio web y este lo guarde en la DB. la clase es la siguiente

    [DataContract(Name = "CustomerEntity", Namespace = "http://Corporate.Entites")]

    public class CustomerEntity : IEquatable<CustomerEntity>

    {

    private int customerId;

    private string code;

    private string name;

    private string companyName;

    private string tradeName;

    private string legalName;

    private string address;

    private string deliveryAddress;

    private string billingAddress;

    private string legalAddress;

    private string customerType;

    private int taxPosition;

    private string status;

    private DateTime lastDateUpdate;

    [DataMember(Name = "CustomerId")]

    public virtual int CustomerId

    {

    get { return customerId; }

    set { customerId = value; }

    }

    [DataMember(Name = "Code")]

    public virtual string Code

    {

    get { return code; }

    set { code = value; }

    }

    [DataMember(Name = "Name")]

    public virtual string Name

    {

    get { return name; }

    set { name = value; }

    }

    [DataMember(Name = "CompanyName")]

    public virtual string CompanyName

    {

    get { return companyName; }

    set { companyName = value; }

    }

    [DataMember(Name = "TradeName")]

    public virtual string TradeName

    {

    get { return tradeName; }

    set { tradeName = value; }

    }

    [DataMember(Name = "LegalName")]

    public virtual string LegalName

    {

    get { return legalName; }

    set { legalName = value; }

    }

    [DataMember(Name = "Address")]

    public virtual string Address

    {

    get { return address; }

    set { address = value; }

    }

    [DataMember(Name = "DeliveryAddress")]

    public virtual string DeliveryAddress

    {

    get { return deliveryAddress; }

    set { deliveryAddress = value; }

    }

    [DataMember(Name = "BillingAddress")]

    public virtual string BillingAddress

    {

    get { return billingAddress; }

    set { billingAddress = value; }

    }

    [DataMember(Name = "LegalAddress")]

    public virtual string LegalAddress

    {

    get { return legalAddress; }

    set { legalAddress = value; }

    }

    [DataMember(Name = "CustomerType")]

    public virtual string CustomerType

    {

    get { return customerType; }

    set { customerType = value; }

    }

    [DataMember(Name = "TaxPosition")]

    public virtual int TaxPosition

    {

    get { return taxPosition; }

    set { taxPosition = value; }

    }

    [DataMember(Name = "Status")]

    public virtual string Status

    {

    get { return status; }

    set { status = value; }

    }

    [DataMember(Name = "LastDateUpdate")]

    public virtual DateTime LastDateUpdate

    {

    get { return lastDateUpdate; }

    set { lastDateUpdate = value; }

    }

    #region

    Miembros de IEquatable<CustomerEntity>

    public virtual bool Equals(CustomerEntity other)

    {

    if (this == other) return true;

    if (this.CustomerId.Equals(other.CustomerId)) return true;

    return false;

    }

    #endregion

    }

    y he creado una clase Base que recibe genericos dependiendo de los datos que desea enviar al server:

    la uri que se arma es algo asi: http://server/servicio.asmx/metodoguardar
    el method le mado POST
    y content es, en este caso, la clase que le envio para que el server procese.

    protected HttpWebResponse ExecuteResquest(Uri uri, string method, object content)

    {

    try

    {

    // Initialize the web request

    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);

    request.ContentType = "application/xml; charset=utf-8";

    request.KeepAlive = false;

    request.PreAuthenticate = true;

    request.Method = method;

    request.Headers.Add("Monitor", string.Empty);

    request.UseDefaultCredentials = true;

    request.CookieContainer = new CookieContainer();

    request.CookieContainer.Add(cookies);

    if (content != null)

    {

        Stream streamRequest = request.GetRequestStream();

        DataContractSerializer serializerRequest = new DataContractSerializer(content.GetType());

        serializerRequest.WriteObject(streamRequest, content);

        //streamRequest.Close();

    }

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

    return response;

    }

    catch (WebException ex)

    {

        throw;

    }

    finally

    {

        // TODO:

    }

    }

    Pero la aplicacion se me queda en esta linea 

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

    no tira error, no tira nada. Se queda colgado ahi.

    me gustaria saber que es lo que estoy haciendo mal y ver como solucionarlo.

    Desde ya muchas gracias a todos ustedes.

    Saludos.


    Tecnico Informatico
    miércoles, 25 de febrero de 2009 11:58

Todas las respuestas

  • Hola Jorge,

    Te puedo contar lo que veo a simple vista.

    Algo no me cierra entre la forma en como declaras la clase, y como la invocas.

    O sea estas definiendo el DataContact, y sus DataMember, o sea estas usando WCF, ahora bien no me cierra la uri con que lo estas llamando.
    O sea en la url que veo que estas usando pones .asmx, o sea ese es un servicio web normal que nada tiene que ver con WCF, si fuera este deberia ser de extension .svc, es la que usa WCF, cuando el host es IIS.

    Salvo que de alguna forma estes usando algun dns que te tranforme la url, o algo asi, pero no creo que sea el caso.

    Has probado acceder al servicio, llamando desde el Browser, o se asi copias esta url y la pegas en el IE, te resuleve bien, no da error.
    Has probado ver el WSDL del servicio.

    Igualmente la forma de invocarlo me suena extraña, no veo que uses el mensaje SOAP en la invocacion

    Mira este ejemplo:

    Invoking Web Service dynamically using HttpWebRequest

    Veras que necesitas invocar la pagina enviando el mensaje SOAP, sino no funciona.
    En el ejemplo invoca un servicio web comun o sea con extension asmx, pero si usas el de WCF, deberia ser muy similar, solo que la url deberia tener una extension .svc


    Bueno espero te sea util la info.
    Saludos




    Leandro Tuttini
    miércoles, 25 de febrero de 2009 12:52