2014-10-28 9 views
8

मैं इस प्रश्न को पोस्ट करूंगा, भले ही मैं देखूं कि इस तरह के कुछ अन्य समान हैं। हालांकि मैं इस त्रुटि को और न ही इसे हल करने के लिए संतोषजनक समाधान नहीं ढूंढ पा रहा हूं।त्रुटि: डब्ल्यूसीएफ टेस्ट क्लाइंट में समर्थित नहीं है क्योंकि यह टाइप सिस्टम का उपयोग करता है। थ्रेडिंग टास्क

तो, आज मुझे परीक्षण के उद्देश्यों के लिए अपने स्थानीय कंप्यूटर पर एक सेवा होस्ट करना पड़ा। यह सेवा एक एकल डब्ल्यूसीएफ सेवा समाधान है और जहां तक ​​मैं लंबे समय से जानता हूं, यह काम कर रहा है। क्योंकि यह का उपयोग करता है प्रकार

System.Threading

इस आपरेशन WCF टेस्ट क्लाइंट में समर्थित नहीं है: हालांकि जब मैं परियोजना डाउनलोड किया है और अपने स्थानीय मशीन पर सेवा की मेजबानी करने की कोशिश की मैं शीर्षक से त्रुटि मिली

तो जब मैं घर वापस आया तो मैंने कुछ एसिंक तरीकों का उपयोग करके सेवा बनाने का फैसला किया और इसके निचले भाग तक पहुंच गया। हालांकि मैं वास्तव में आश्चर्यचकित था जब मुझे लगभग खाली परियोजना पर यह वही त्रुटि मिलती है जो कि उपयोग नहीं कर रहा है (या कम से कम ऐसा लगता है) System.Threading.Tasks कहीं भी।

मैं तो क्या किया:

  • बनाया नया WCF Service विजुअल स्टूडियो 2013 डिफ़ॉल्ट टेम्पलेट का उपयोग कर
  • वाम डिफ़ॉल्ट IService1.cs फ़ाइल और Service1.svc
  • बदल दिया IService1.cs रहे हैं:

    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Runtime.Serialization; 
    using System.ServiceModel; 
    using System.ServiceModel.Web; 
    using System.Text; 
    
    namespace WcfService 
    { 
        [ServiceContract] 
        public interface IService1 
        { 
         [OperationContract] 
         int GetEmpId(int id); 
        } 
    } 
    
    • Service1.svc को

      सिस्टम का उपयोग करके बदल दिया; System.Collections.Generic का उपयोग कर ; System.Linq का उपयोग कर ; System.Runtime.Serialization का उपयोग कर ; System.ServiceModel का उपयोग कर ; System.ServiceModel.Web का उपयोग कर ; System.Text का उपयोग कर ;

      नाम स्थान WcfService { सार्वजनिक वर्ग Service1: IService1 { सार्वजनिक पूर्णांक GetEmpId (पूर्णांक आईडी) { वापसी आईडी; } } }

और डिफ़ॉल्ट web.config जो इस तरह दिखता है छोड़ने:

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, set the values below to false before deployment --> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <protocolMapping> 
     <add binding="basicHttpsBinding" scheme="https" /> 
    </protocolMapping>  
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 

मैं भी Task, Threading या कुछ इस तरह उपयोग करने के लिए प्रयास नहीं किया है, बस यह देखना चाहता था कि मेरी सेवा ऊपर है और चल रही है इसलिए मैं चीजों को जोड़ने शुरू कर सकता हूं और देख सकता हूं कि वास्तव में मुझे त्रुटि कब मिलेगी, लेकिन मेरे स्टार्टअप के रूप में Service1.svc सेट करने के बाद मेरे आश्चर्य के लिए कक्षा और प्रोजेक्ट को चलाने की कोशिश कर रहा था मुझे एक ही त्रुटि मिली:

यह ऑपरेशन डब्ल्यूसीएफ टेस्ट क्लाइंट में समर्थित नहीं है क्योंकि यह टाइप सिस्टम का उपयोग करता है।थ्रेडिंग

ठीक है, अब मैं पूरी तरह से खो गया हूं। मुझे अपनी परियोजना चलाने के कई प्रयासों के बाद यह त्रुटि मिल रही थी। इस प्रश्न को पोस्ट करने से पहले मैंने फिर कोशिश की और इस बार मुझे त्रुटि नहीं मिली। असल में मैंने अभी अपना ग्राहक समाप्त कर लिया है और मैं GetEmpId() विधि का उपभोग करने में सक्षम हूं।

तो यहां क्या हो रहा है।

Service

मैं विधि GetEmpIdAsync() की जरूरत नहीं है: यह स्क्रीनशॉट जब मैं अपने प्रोजेक्ट का निर्माण होता है। मैंने इसे जोड़ने की कोशिश नहीं की है। और यह कैसे आता है यह कई बार नहीं बनाएगा और अब अचानक मैं उस विधि का उपयोग करने में सक्षम हूं जिसे मैंने वास्तव में बहुत शुरुआत से लागू किया है?

उत्तर

9

डब्ल्यूसीएफ स्वचालित रूप से आपके प्रत्येक तरीके के लिए एक तुल्यकालिक और एक असीमित इंटरफ़ेस का खुलासा करेगा। उन दोनों विधियों को सर्वर पक्ष पर GetEmpId सिंक्रनाइज़ेशन पर कॉल करें, अंतर का परिणाम क्लाइंट पक्ष पर सिंक्रोनस या असिंक्रोनस होने का इंतजार कर रहा है।

यदि आप होने के लिए

public class Service1 : IService1 
{ 
    public Task<int> GetEmpIdAsync(int id) 
    { 
     return Task.FromResult<int>(id); 
    } 
} 

भी आप परीक्षण उपकरण पर int GetEmpId(int id) देखना होगा अपनी कक्षा बनाया है। डब्ल्यूसीएफ एक ही समारोह में दो संस्करणों को मैप करने के लिए पर्याप्त स्मार्ट है।

"त्रुटि" जो आप देख रहे हैं वह केवल विज़ुअल स्टूडियो के साथ परीक्षण उपकरण की एक सीमा है, दोनों फ़ंक्शंस समान सर्वर साइड फ़ंक्शन को कॉल करते हैं, इसलिए माइक्रोसॉफ्ट को समर्थन जोड़ने के लिए कोई मजबूती नहीं है। कोई वास्तविक त्रुटि नहीं है। यदि आप वास्तव में एसिंक संस्करण का परीक्षण करना चाहते हैं तो आपको अपना स्वयं का टेस्ट क्लाइंट लिखना होगा जो फ़ंक्शन को कॉल करता है।

+0

स्पष्टीकरण के लिए धन्यवाद। सेवा साल पहले बनाई गई थी और तथ्य यह है कि मुझे त्रुटि मिल रही है, मुझे सबसे ज्यादा भ्रमित कर रहा था क्योंकि मुझे पता है कि यह सेवा लंबे समय से काम कर रही थी। मैं इसे एसिंक मोड में उपयोग करने की योजना नहीं बना रहा हूं, इसके विपरीत मुझे आश्चर्य है कि क्यों एमएस ऐसा सम्मेलन करेगा। कम से कम मेरे लिए, क्योंकि मैं 'डब्ल्यूसीएफ' का उपयोग कर रहा हूं, शायद ही कभी यह अजीब और भ्रमित लगता है। मुझे लगता है कि यह कुछ ऐसा है जो 'विजुअल स्टूडियो' के नए संस्करणों के साथ आता है ... हालांकि, फिर से धन्यवाद। – Leron

+0

बीटीडब्ल्यू, क्या सिंचन विधियों को देखने के लिए टूल को "बताना" करने का कोई तरीका है, इसलिए मुझे उन संदेश नहीं मिलते हैं? – Leron

+1

वह परीक्षण उपकरण, मुझे ऐसा नहीं लगता है। हालांकि यदि आप अपने इंटरफ़ेस को उत्पन्न करने के लिए [SvcUtil] (http://msdn.microsoft.com/en-us/library/aa347733 (v = vs.110) .aspx) का उपयोग कर रहे हैं तो आपको बस '/ async 'छोड़ना होगा या यदि आप "सेवा जोड़ें रिफ्रेंस" जीयूआई का उपयोग कर रहे हैं तो बस 'उन्नत' पर क्लिक करें, फिर "[एसिंक्रोनस ऑपरेशंस की पीढ़ी की अनुमति दें]" के लिए बॉक्स को अनचेक करें (http://i.stack.imgur.com/GNsK0.png) " –

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