2010-07-01 16 views
9

स्वीकार नहीं करेगा मेरे पास डेल्फी 2006 में एक सर्वर/क्लाइंट एप्लिकेशन विकसित हुआ है। क्लाइंट Win32 है और सर्वर एक .NET 1.1 webservice है।एएसएमएक्स के रूप में उजागर डब्ल्यूसीएफ सेवा पैरामीटर

हम इस परियोजना को अद्यतन करने की प्रक्रिया में हैं, लेकिन इसे छोटे चरणों में किया जाना है। मैंने सर्वर से शुरुआत की और वीएस 2010 (सी # नेट 4.0) में डब्ल्यूसीएफ प्रोजेक्ट बनाया। पहला कदम क्लाइंट को बदले बिना डब्ल्यूसीएफ में सर्वर चलाने के लिए है। तो मैंने मुखौटा पैटर्न का उपयोग किया, पुराने डेल्फी वेबसाइटों के लिए एक समान इंटरफ़ेस बनाया, पुराने .NET 1.1 डीएल के संदर्भ में जोड़ा गया और मेरे कार्यान्वयन में मैंने पुराना नेट 1.1 कोड कहा।

क्लाइंट पर प्रॉक्सी क्लास को अपडेट करने का अगला चरण। यह असफल रहा। डब्लूएसडीएल आयातक ने मूल एचटीपी बाइंडिंग को सही ढंग से नहीं समझा, इसलिए प्रॉक्सी क्लास जिसे जेनरेट किया गया था, मौजूदा प्रॉक्सी को प्रतिस्थापित नहीं कर सका।

कुछ शोध के बाद मुझे यह ब्लॉग पोस्ट मिला।

http://kjellsj.blogspot.com/2006/12/how-to-expose-wcf-service-also-as-asmx.html

यह काम किया, ASMX डबल्यूएसडीएल वर्ष .net 1.1 तो सब कुछ से अलग नहीं था ठीक appered।

लेकिन यह नहीं था। नई सेवा का परीक्षण करते समय मैंने पाया कि मेरे सभी पैरामीटर सर्वर पर खाली/शून्य थे। मैंने क्लाइंट पर फिडलर के साथ प्रयास किया और पैरामीटर एक्सएमएल में मौजूद है जो सर्वर को भेजा जाता है।

तो मैं अटक गया हूं। इसे हल करने के तरीके पर कोई विचार बहुत सराहना की जाएगी। क्या कोई ऐसा कोड है जो देखने के लिए हस्तक्षेप कर सकता है तो मुझे बताएं।

+0

तो डबल्यूएसडीएल ही है, लेकिन सर्वर अब नेट 4.0 के बजाय 1.1 है KnownType विशेषता जोड़ें? यदि डेल्फी क्लाइंट पहले के समान डब्लूएसडीएल का उपयोग करता है, लेकिन सर्वर अब पैरामीटर नहीं देखता है, तो मैं नेट में क्लाइंट लिखूंगा और देख सकता हूं कि यह काम करता है या नहीं। यदि ऐसा होता है, तो नेट और डेल्फी के क्लाइंट के साबुन अनुरोधों की तुलना करें। – mjn

+5

एक्सएमएल की तुलना करें। "नल पैरामीटर" आमतौर पर इसका मतलब है कि क्या भेजा जा रहा है और क्या अपेक्षित है के बीच एक नामस्थान अंतर है। –

उत्तर

1

मैं एक वेब सेवा asmx के साथ एक ही समस्या में भाग गया ... कुछ डेटा उनके मूल्य खो रहा था। यदि आप पदानुक्रमित डेटा का उपयोग कर रहे हैं, तो आपको XmlInclude विशेषता का उपयोग करके आंतरिक या विरासत वाली वस्तुओं को घोषित करने की आवश्यकता हो सकती है। उदाहरण के लिए, यदि आपके पास उपयोगकर्ता सेवा है जो आपकी सेवा और ग्राहक उप वर्ग में उपयोग की जाती है, तो आपको ग्राहक सेवा को सेवा में घोषित करने की आवश्यकता हो सकती है यदि इसका उपयोग सीधे वेब विधि में नहीं किया जाता है। आप निम्नानुसार ऐसा करेंगे।

[XmlInclude(typeof(Customer))] 
public class Service : WebService 

बेशक, ऐसा करने के लिए कुछ भी नहीं हो सकता है, तो अगर ऐसा है तो शुभकामनाएं। :)

0

पुष्टि करें कि नई सेवा में पैरामीटर नाम पुराने सेवा में नामों से मेल खाते हैं। यदि आपने पैरामीटर नाम बदल दिए हैं, तो वे एक्सएमएल से मैप नहीं करेंगे, इसलिए निष्पादन कोड में शून्य होगा।

संबंधित मुद्दे