लागू करने के लिए वेब सेवा प्रॉक्सी क्लास वेब वेब एक्सेस (डब्ल्यूसीएफ) के लिए जेनरेट प्रॉक्सी क्लास को एक सामान्य इंटरफ़ेस को लागू करने का एक तरीका ढूंढ रहा हूं ताकि वेब सेवा एक्सेस और "प्रत्यक्ष" पहुंच के बीच आसानी से स्विच किया जा सके। क्लाइंट अनुप्रयोग में व्यापार परत, की तरह कुछ:इंटरफ़ेस
public IBusiness GetBusinessObject()
{
if (_mode = "remote")
return new BusinessWebService.Business(); // access through web service proxy class
else
return new Business(); // direct access
}
हालांकि, कस्टम प्रकार (उदाहरण के लिए नीचे दिए गए उदाहरण में CustomSerializableType
) उत्पन्न प्रॉक्सी कक्षा में संदर्भित नहीं हैं। इसके बजाय नए, समान प्रकार उत्पन्न होते हैं, जो प्रॉक्सी क्लास को इंटरफ़ेस को कार्यान्वित करने के लिए असंभव बनाता है।
क्या जेनरेट प्रॉक्सी क्लास इन प्रकारों को संदर्भित करने का कोई तरीका है, या क्या मैं इस सब गलत के बारे में जा रहा हूं? क्या मुझे वेब सेवा को डब्लूसीएफ सेवा में परिवर्तित करने पर विचार करना चाहिए?
जानकारी
हमारा समाधान इन चार परियोजनाओं के होते हैं:
- एक व्यापार पुस्तकालय (, व्यावसायिक तर्क होता है accesses आंकड़ों की दुकान)
- एक आम पुस्तकालय (आम होता है कार्यक्षमता,
CustomSerializableType
सहित) - एक वेब सेवा
- स्थानीय मोड: उपाध्यक्ष
- एक विंडोज़ अनुप्रयोग
हमारे ग्राहक खिड़कियों आवेदन दो भिन्न मोड में चलाने के लिए सक्षम होना चाहता है (दूरस्थ क्लाइंट और व्यापार परत बीच प्रॉक्सी के रूप में कार्य करता है) , जहां एप्लिकेशन डेटा
- रिमोट मोड तक पहुंचने के लिए सीधे व्यवसाय लाइब्रेरी का उपयोग करता है, जहां डेटा
ऐसा करने के लिए, हमने एक इंटरफ़ेस बनाया है, IBusiness, जो सामान्य पुस्तकालय में स्थित है और इसमें सभी व्यावसायिक विधियां हैं।
इंटरफ़ेस
public interface IBusiness
{
CustomSerializableType DoSomeWork();
}
व्यापार परत
public class Business : IBusiness
{
public CustomSerializableType DoSomeWork()
{
// access data store
}
}
वेब सेवा
public class WebServiceBusiness : IBusiness
{
private Business _business = new Business();
[WebMethod]
public CustomSerializableType DoSomeWork()
{
return _business.DoSomeWork();
}
}
जनरेट किया गया प्रॉक्सी वर्ग (पठनीयता के लिए बाहर छोड़ दिया कोड की एक टन)
public partial class Business
: System.Web.Services.Protocols.SoapHttpClientProtocol
{
public CustomSerializableType DoSomeWork()
{
// ...
}
public partial class CustomSerializableType {
// PROBLEM: this new type is referenced, instead of the
// type in the common library
}
}
क्या आप प्रॉक्सी कक्षाएं उत्पन्न करने के लिए svcutil.exe का उपयोग कर रहे हैं? –
नहीं, फिलहाल मैं विजुअल स्टूडियो 2010 अंतर्निहित टूल्स का उपयोग कर रहा हूं। मैंने wsdl.exe के साथ थोड़ा सा गड़बड़ करने की कोशिश की, लेकिन यह मेरी समस्याओं का समाधान नहीं किया। Svcutil.exe एक बेहतर विकल्प है? क्या मुझे 'विरासत' वेब सेवाओं की बजाय डब्ल्यूसीएफ सेवाओं में अपग्रेड करने की आवश्यकता नहीं होगी? – bernhof