Dzieje się tak, ponieważ jeden z obiektów ContactInfo
jest serwerem proxy usługi WWW i znajduje się w innym obszarze nazw.
Jest to znany problem z usługami sieciowymi w stylu ASMX. W przeszłości zaimplementowałem automatyczną płytką kopię do obejścia tego (here's how, chociaż gdybym robił to ponownie, prawdopodobnie zamiast tego spojrzałbym na AutoMapper).
Na przykład, jeśli masz zespół z następujących klas:
MyProject.ContactInfo
i wrócisz wystąpienie to z metodą internetowej:
public class DoSomethingService : System.Web.Services.WebService
{
public MyProject.ContactInfo GetContactInfo(int id)
{
// Code here...
}
}
Wtedy, kiedy dodać odwołanie WWW do twojego projektu klienta, otrzymujesz to:
MyClientProject.DoSomethingService.ContactInfo
Oznacza to, że jeśli w kliencie ap plikacja, wywołać usługę internetową, aby uzyskać ContactInfo
, masz taką sytuację:
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;
}
}
}
}
to na tym ostatnim wierszu że mogę korzystać ShallowCopy
Klasa:
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);
}
}
}
}
UWAGA
To tylko działa, ponieważ klasa proxy i klasa "real" mają dokładnie takie same właściwości (jedna jest generowana z drugiej przez Visual Studio).
Czy ostatnio aktualizowałeś swoją stronę internetową? – womp