Questo perché uno degli oggetti ContactInfo
è un proxy del servizio Web e si trova in uno spazio dei nomi diverso.
È un problema noto con i servizi Web in stile asmx. In passato ho implementato la copia superficiale automatica per aggirare il problema (here's how, sebbene se lo stessi facendo di nuovo probabilmente guarderei allo AutoMapper).
Ad esempio, se si dispone di un assieme con la seguente classe:
MyProject.ContactInfo
e si ritorna un'istanza di esso da un metodo Web:
public class DoSomethingService : System.Web.Services.WebService
{
public MyProject.ContactInfo GetContactInfo(int id)
{
// Code here...
}
}
Poi, quando si aggiungere il riferimento web al progetto cliente, in realtà si ottiene questo:
MyClientProject.DoSomethingService.ContactInfo
questo significa che se, nel vostro ap cliente plicatura, si chiama il servizio web per ottenere un ContactInfo
, si ha questa situazione:
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;
}
}
}
}
E 'su quella ultima linea che io uso il mio ShallowCopy
classe:
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
Questo solo funziona perché la classe proxy e la classe "reale" hanno esattamente le stesse proprietà (una viene generata dall'altra da Visual Studio).
Hai aggiornato la tua pagina web ultimamente? – womp