2012-10-26 11 views
6

मैं कर रहा हूँ नई WCF प्रोग्रामिंग, मैं शुरू किया ट्यूटोरियल हो रही है की श्रृंखला नीचे दिए गए लिंकWCF 2012

http://msdn.microsoft.com/en-us/library/ms734712.aspx

मैं सांत्वना आवेदन में सेवा की मेजबानी की है लेकिन जब मैं एक ग्राहक बनाने की कोशिश की और से पीछा किया था सेवा संदर्भ जोड़ने की कोशिश की मुझे निम्नलिखित अपवाद मिला।

आवेदन

class Program 
{ 
    static void Main(string[] args) 
    { 
     // Step 1 Create a URI to serve as the base address. 
     Uri baseAddress = 
      new Uri("http://localhost:8000/GettingStarted/"); 

     // Step 2 Create a ServiceHost instance 
     ServiceHost selfHost = 
      new ServiceHost(typeof(CalculatorService), baseAddress); 

     try 
     { 
      // Step 3 Add a service endpoint. 
      selfHost.AddServiceEndpoint(typeof(ICalculator), 
       new WSHttpBinding(), 
       "CalculatorService"); 

      // Step 4 Enable metadata exchange. 
      var smb = new ServiceMetadataBehavior(); 
      smb.HttpGetEnabled = true; 
      selfHost.Description.Behaviors.Add(smb); 

      // Step 5 Start the service. 
      selfHost.Open(); 
      Console.WriteLine("The service is ready."); 
      Console.WriteLine("Press <ENTER> to terminate."); 
      Console.WriteLine(); 
      Console.ReadLine(); 

      // Close the ServiceHostBase to shutdown. 
      selfHost.Close(); 
     } 
     catch (CommunicationException ce) 
     { 
      Console.WriteLine("exception: {0}", ce.Message); 
      selfHost.Abort(); 
     } 
    } 
} 

की मेजबानी की

There was an error downloading 'http: localhost:8000/GettingStarted/mex/_vti_bin/ListData.svc/$metadata'. The request failed with HTTP status 405: Method Not Allowed. Metadata contains a reference that cannot be resolved: 'http: localhost:8000/GettingStarted/mex'. There was no endpoint listening at http: localhost:8000/GettingStarted/mex that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. The remote server returned an error: (404) Not Found. If the service is defined in the current solution, try building the solution and adding the service reference again.

कोड अब मैं यह पता लगाने की कि समस्या क्या है असमर्थ हूँ। मैं विजुअल स्टूडियो 2012 और .NET प्लेटफ़ॉर्म 4.5 का उपयोग कर रहा हूं।

+0

सबसे पहले आप सफलतापूर्वक सेवा होस्ट करने में सक्षम थे? क्या आप अपने कंसोल एप्लिकेशन का आउटपुट साझा कर सकते हैं? – Praburaj

उत्तर

8

मैं भी वही समस्या थी, इस के साथ खिलवाड़। हां, आपने ट्यूटोरियल का सही ढंग से पालन किया है, लेकिन यदि आप उससे कनेक्ट करना चाहते हैं और सेवा के रूप में उपभोग करना चाहते हैं (जैसा कि सेवा संदर्भ में है) तो आपको मेक्स सेवा एनपॉइंट में भी जोड़ना होगा। अपने selfhost.Description.Behaviors.Add (SMB) के बाद इस लाइन जोड़ें:

selfhost.AddServiceEndpoint(
      typeof(IMetadataExchange), 
      MetadataExchangeBindings.CreateMexHttpBinding(), 
      "http://localhost:8000/GettingStarted/mex"); 

है कि आप "जोड़ें सेवा संदर्भ" के माध्यम से कनेक्ट करने के लिए सक्षम होना चाहिए। साथ ही, मैंने आपके सिस्टम के आधार पर पाया है, आपको नेटवर्क से कनेक्शन की अनुमति देने के लिए व्यवस्थापक के रूप में वीएस चलाने की आवश्यकता हो सकती है (यदि आपने गलती से इसे अतीत में नहीं बताया है)।

+0

मुझे एक ही त्रुटि है, मैं इसे कोड के बजाय app.config के माध्यम से कैसे कॉन्फ़िगर कर सकता हूं? –

+0

मुझे एक ही समस्या है। सेवा की जांच की गई कॉन्फ़िगर करें और मेरे पास यह लाइन क्या यह MEX सेवा समापन बिंदु है? –

+0

यह अनिवार्य क्यों है जब सोपूआई बिना किसी समस्या के सेवा की खोज कर सकता है? केवल जब मैं वीएस2015 से इस (वीएस2015 प्रोजेक्ट) सेवा का उपभोग करने की कोशिश करता हूं, तो मैं इस समस्या में भाग लेता हूं। लेकिन सोपूआई किसी भी समस्या के बिना खोज सकता है। –

0

त्रुटि संदेश से निर्णय यह लगता है कि निर्दिष्ट पोर्ट पर कोई सेवा नहीं है। आपको कंसोल एप्लिकेशन होना चाहिए जो उस सेवा को होस्ट करता है जब आप इसे सेवा संदर्भ जोड़ने का प्रयास कर रहे हों।

+0

उत्तर देने के लिए हाय थैंक्स, कंसोल एप्लिकेशन चल रहा है, लेकिन फिर भी एक ही त्रुटि –

+0

यह भी सुनिश्चित करें कि आपकी सेवा में HttpGetEnabled चालू है। अन्यथा आपका ग्राहक सेवा अनुबंध प्राप्त नहीं कर पाएगा। –

0

जाहिर है, सेवा नहीं चल रही है जिसका मतलब है कि यूआरएल पर सेवा संदर्भ बनाने के लिए उपयोग करने वाले कोई अंतराल नहीं है।

आप आईआईएस में सेवा की मेजबानी कर सकते हैं, या ऊपर वर्णित दमिर के रूप में कंसोल एप्लिकेशन को चालू रख सकते हैं।

0

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

+0

हाय कंसोल एप्लिकेशन चल रहा था, जब मैंने सेवा संदर्भ –

0

क्या आप वाकई एक मेक्स एंडपॉइंट परिभाषित कर चुके हैं? यह आपकी सेवा के बारे में मेटाडेटा जानकारी प्रदान करता है, ताकि स्टूडियो क्लाइंट प्रॉक्सी उत्पन्न कर सके।

ट्यूटोरियल आप से जुड़ा हुआ में, यह this bit है:

// Step 4 Enable metadata exchange. 
ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
smb.HttpGetEnabled = true; 
selfHost.Description.Behaviors.Add(smb); 
+0

जोड़ने की कोशिश की, हाँ यह होस्टिंग एप्लिकेशन में है क्योंकि आप देख सकते हैं कि मैंने प्रश्न संपादित किया है और इसमें होस्टिंग एप्लिकेशन का कोड भी शामिल है, क्या मुझे app.config भी पोस्ट करना चाहिए? –

0

आप IIS में वेब होस्टिंग सेवा कर रहे हैं, web.config में जाँच (व्यवहार धारा के तहत)

httpsGetEnabled सच

0

मैं आज एक ऐसी ही समस्या का सामना किया पर सेट है। हालांकि, मेरे लिए एंडीपॉइंट्स को स्पष्ट रूप से जोड़ने के लिए मेरे लिए जरूरी नहीं था, क्योंकि @IMortalitySX पहले से ही कहा गया है।

मेरे पास असफल होने का एक अलग कारण था: मैं http://0.0.0.0 पर बाध्यकारी था, सोच रहा था कि सुनो आईपी कोई फर्क नहीं पड़ता। दरअसल, सोपूआई I के माध्यम से सेवा कनेक्ट करने और सेवा का उपयोग करने में सक्षम था। लेकिन जब किसी अन्य विजुअल स्टूडियो प्रोजेक्ट में सेवा की खोज करने की कोशिश की जा रही है, तो खोज विफल हो जाएगी, क्योंकि वीएस को प्रारंभिक प्रतिक्रिया मिलेगी, लेकिन फिर http://0.0.0.0 वाले लिंक का पालन करें और फिर असफल हो जाएं।

तो http://0.0.0.0 को मेरी मशीन के सही आईपी में बदलकर मेरी समस्या तय हुई।

-1

अपने ब्राउज़र में यूरी पता डालने का प्रयास करें। मेरे मामले में मैं एक अपवाद डिस्प्ले देखने में सक्षम था।

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