2010-12-09 10 views
5

Me he encontrado con un problema, no estoy seguro si es un problema, pero me gustaría obtener algunos consejos.Problema con el servicio web C#, haciendo referencia a un método y un tipo

he desarrollado aC# servicio web en VS2010 y cuando puedo depurar el servicio i obtener este error en mi navegador

The XML element 'VoucherResponse' from namespace 'http://test.org/' references a method and a type. Change the method's message name using WebMethodAttribute or change the type's root element using the XmlRootAttribute.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidOperationException: The XML element 'VoucherResponse' from namespace 'test.org' references a method and a type. Change the method's message name using WebMethodAttribute or change the type's root element using the XmlRootAttribute.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Ahora mirando mi código en la clase real "VoucherResponse" tengo,

public class VoucherResponse : AResponse 
{ 
    public Voucher Voucher { get; set; } 
} 

Y el objeto vale ve así

public class Voucher 
{ 
    public string PIN { get; set; } 
    public string Serial { get; set; } 
    public string Batch { get; set; } 
} 

Ahora en uno o En mis métodos web devuelvo el VoucherResponse y asumo que este error ocurre cuando se refleja y se comprueba.

¿Alguien ha tenido un problema similar con esto antes, o alguien me puede dar algún consejo al respecto?

Gracias

Respuesta

7

Al parecer, el jabón no pueden manejar métodos que tienen el mismo nombre que su tipo de retorno. se puede arreglar mediante la lectura del error, y actuar en consecuencia:

public class VoucherResponse 
{ 
    [WebMethod(MessageName="TheVoucher")] 
    public Voucher Voucher{get; set;} 
} 
+0

Eso no pareció ayudarme, intenté con lo que sugirió y ocurrió el mismo error - EDITAR: Ok, lo utilicé en mi método web real que devuelve el VoucherResponse y funcionó .. Gracias –

34

me encontré otro caso que eleva el error! Aquí está mi código:

[WebMethod] 
public CheckUpdateResponse CheckUpdate() 
{ 
... 
} 

Ok, me explico: CheckUpdateResponse es una estructura que se define en el código, CheckUpdate() es un método. Por lo tanto, en el WSDL .NET agregue automáticamente un sufijo Response al nombre del método CheckUpdate.

Et voilà: se encuentra un elemento duplicado y da el error "cambio de nombre de mensaje utilizando el método WebMethodAttribute ..."

Solución? Cambié el nombre del tipo devuelto de CheckUpdateResponse a CheckUpdateResult y ahora todo funciona bien.

¡Espero que esto ayude a alguien! Perdí mucho tiempo en esto ...

+1

. ¡Gracias! – Ultor

+1

2 casos en un millón, supongo ... :) –

+0

Sí ... esto fue lo que me sorprendió –

0

Tuve el mismo problema, pero en mi caso; la aplicación que desarrollé es cliente de servicio web, por lo que no tengo control sobre el cambio de WSDL \ Schema.

El problema es que tengo un servicio web con 17 operaciones, todas devuelven el mismo tipo complejo, recibí el error mencionado debido a la deserialización del tipo de devolución, porque .Net está ajustando el tipo de devolución para cada salida, el error y el serializador está lanzando:

The XML element 'XYZ' from namespace 'ABC' references a method and a type. Change the method's message name using WebMethodAttribute or change the type's root element using the XmlRootAttribute. 

Solución: abrí archivo Reference.cs, eliminado todas las clases de tipo de retorno generada wappered, y quedó con un solo y luego cambió su nombre de la clase que sea genérico, no relacionado con la operación, funcionó para mí.

Cuestiones relacionadas