ऐसा इसलिए है क्योंकि ContactInfo
ऑब्जेक्ट्स में से एक वेब सेवा प्रॉक्सी है, और यह एक अलग नामस्थान में है।
यह एएसएमएक्स-शैली वेब सेवाओं के साथ एक ज्ञात समस्या है। अतीत में मैंने स्वचालित उथले-प्रतिलिपि को इसके आसपास काम करने के लिए लागू किया है (here's how, हालांकि अगर मैं इसे फिर से कर रहा था तो शायद मैं AutoMapper पर देखता हूं)।
उदाहरण के लिए, यदि आप निम्नलिखित वर्ग के साथ एक विधानसभा है:
MyProject.ContactInfo
और आप एक वेब विधि से यह का एक उदाहरण देते हैं:
public class DoSomethingService : System.Web.Services.WebService
{
public MyProject.ContactInfo GetContactInfo(int id)
{
// Code here...
}
}
फिर आप वेब संदर्भ जोड़ने जब अपने क्लाइंट प्रोजेक्ट में, आपको वास्तव में यह मिलता है:
MyClientProject.DoSomethingService.ContactInfo
इसका मतलब है कि यदि आपके क्लाइंट एपी में तह, आप एक ContactInfo
प्राप्त करने के लिए वेब सेवा को कॉल, तो आप इस स्थिति है:
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;
}
}
}
}
ऐसा नहीं है कि अंतिम पंक्ति है कि मैं अपने 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);
}
}
}
}
नोट
यह केवल काम करता है क्योंकि प्रॉक्सी क्लास और "असली" कक्षा में बिल्कुल वही गुण होते हैं (एक दृश्य स्टूडियो द्वारा दूसरे से उत्पन्न होता है)।
स्रोत
2009-09-17 15:52:13
क्या आपने हाल ही में अपना वेब संदर्भ अपडेट किया है? – womp