Esto se debe a que uno de los objetos ContactInfo
es un proxy del servicio web y está en un espacio de nombre diferente.
Es un problema conocido con los servicios web de estilo asmx. En el pasado, implementé la copia superficial automática para evitarla (here's how, aunque si lo hiciera de nuevo, probablemente miraría AutoMapper).
Por ejemplo, si usted tiene un conjunto con la siguiente clase:
MyProject.ContactInfo
y regresa una instancia del mismo a partir de un método web:
public class DoSomethingService : System.Web.Services.WebService
{
public MyProject.ContactInfo GetContactInfo(int id)
{
// Code here...
}
}
Entonces, cuando usted agregar la referencia Web para su proyecto de cliente, realmente obtiene esto:
MyClientProject.DoSomethingService.ContactInfo
Esto significa que si, en su cliente ap plicatura, se llama al servicio web para obtener una ContactInfo
, usted tiene esta situación:
namespace MyClientProject
{
public class MyClientClass
{
public void AskWebServiceForContactInfo()
{
using (var service = new DoSomethingService())
{
MyClientProject.DoSomethingService.ContactInfo contactInfo = service.GetContactInfo(1);
// ERROR: You can't cast this:
MyProject.ContactInfo localContactInfo = contactInfo;
}
}
}
}
Está en la última línea que utilizo mi clase ShallowCopy
:
namespace MyClientProject
{
public class MyClientClass
{
public void AskWebServiceForContactInfo()
{
using (var service = new DoSomethingService())
{
MyClientProject.DoSomethingService.ContactInfo contactInfo = service.GetContactInfo(1);
// We actually get a new object here, of the correct namespace
MyProject.ContactInfo localContactInfo = ShallowCopy.Copy<MyClientProject.DoSomethingService.ContactInfo, MyProject.ContactInfo>(contactInfo);
}
}
}
}
NOTA
Esto sólo funciona porque la clase proxy y la clase "real" tienen exactamente las mismas propiedades (una se genera a partir de la otra por Visual Studio).
¿Ha actualizado su referencia web últimamente? – womp