सेवा में शून्य अनुप्रयोग (गैर-अवसंरचना) समापन बिंदु हैं


91

मैंने हाल ही में एक WCF सेवा (dll) और एक सेवा होस्ट (exe) बनाया है। मुझे पता है कि मेरी WCF सेवा सही ढंग से काम कर रही है क्योंकि मैं सफलतापूर्वक WcfTestClient में सेवा को जोड़ने में सक्षम हूं।

हालाँकि, मुझे लगता है कि जब मैं एक सेवा मेजबान (exe) से अपने WCF को खाली करने के लिए आता हूं, तो मैं एक मुद्दे पर चल रहा हूं। मैं अपनी सेवा होस्ट (exe) में WCF (dll) का संदर्भ जोड़ सकता हूं और exe के लिए आवश्यक डेटासेट बना सकता हूं; जैसे सर्विस इंस्टॉलर, सर्विस होस्ट और ऐप .config, संकलन और फिर अंत में InstallUtil का उपयोग करके एक्साई स्थापित करें। लेकिन, जब मैंने Microsoft प्रबंधन कंसोल में सेवा शुरू करने की कोशिश की, तो सेवा शुरू होने के तुरंत बाद बंद हो जाती है।

इसलिए मैंने जांच शुरू की कि क्या वास्तव में इस समस्या का कारण बन सकता है इस घटना व्यूअर में एप्लिकेशन लॉग से इस त्रुटि के साथ आया।

विवरण:

सेवा शुरू नहीं की जा सकती। System.InvalidOperationException: सेवा 'सेवा' में शून्य अनुप्रयोग (गैर-अवसंरचना) समापन बिंदु हैं। ऐसा इसलिए हो सकता है कि आपके एप्लिकेशन के लिए कोई कॉन्फ़िगरेशन फ़ाइल नहीं मिली, या क्योंकि सेवा नाम से मेल खाने वाला कोई सेवा तत्व कॉन्फ़िगरेशन फ़ाइल में नहीं मिल सकता है, या इसलिए कि कोई अंतिम बिंदु सेवा तत्व में परिभाषित नहीं किए गए थे।

यह त्रुटि वास्तव में उत्पन्न होती है OnStart; जब मैं इस कॉल को करता हूं, तो अपने निर्वासन का ServiceHost.Open()। मैंने कई पोस्ट देखे हैं जहां अन्य व्यक्तियों ने इस मुद्दे को चलाया है, हालांकि सबसे ज्यादा अगर उन सभी को नहीं, तो दावा करें कि सेवा का नाम या अनुबंध; नाम स्थान और वर्ग का नाम, निर्दिष्ट नहीं किया जा रहा है। मैंने अपनी कॉन्फ़िगरेशन फ़ाइल में इन दोनों प्रविष्टियों की जाँच की; exe में और साथ ही dll में, और वे पूरी तरह से मेल खाते हैं। मेरे पास कार्यालय के दूसरे लोगों की जांच में मेरे पीछे दूसरे लोग हैं, यह सुनिश्चित करने के लिए कि मैं एक बिंदु पर अंधा नहीं हो रहा था, लेकिन निश्चित रूप से वे मेरे लिए एक ही निष्कर्ष पर पहुंचे कि सब कुछ जैसा दिखता था, वह सही ढंग से निर्दिष्ट किया गया था। मैं वास्तव में इस बिंदु पर क्या हो रहा है के रूप में एक खो में हूँ। किसी को भी इस मुद्दे के साथ मेरी मदद कर सकता है?

एक और बात जो संभावित कारण के रूप में सामने आई, वह यह हो सकती है कि app.config को कभी पढ़ा नहीं जा रहा है; कम से कम मुझे नहीं लगता कि मुझे पढ़ना चाहिए। क्या यह समस्या हो सकती है? यदि हां, तो मैं इस मुद्दे को कैसे संबोधित कर सकता हूं। फिर से, किसी भी मदद की सराहना की जाएगी।


2
सेवा अनुबंध की परिभाषा को service.dll.config से service.exe.config में कॉपी किया जाना चाहिए।
जॉन सॉन्डर्स

1
आप हमें सेवा app.config दिखा सकते हैं ?? क्या आप ServiceHost को तुरंत खोलने / खोलने के लिए NT सेवा में कुछ विशेष करते हैं?
marc_s

जवाबों:


93

मुझे बस यह समस्या थी और सेवा नाम, उदाहरण के लिए नाम स्थान जोड़कर इसे हल किया

 <service name="TechResponse">

बन गया

 <service name="SvcClient.TechResponse">

मैंने इसे App.config के बजाय Web.config के साथ हल करते हुए भी देखा है।


हाँ, हमने नामस्थान बदल दिए हैं ताकि यह एक .svc फ़ाइल में एक से मेल करने के लिए सेवा न मिल सके (एक अंडरस्कोर डॉट के साथ स्विच हो गया!) सेवा के नामों की त्वरित जाँच से पता चला कि क्या था।

1
मेरी समस्या का हल करने के साथ-साथ इन त्वरित और आसान सुधारों से प्यार करें!
vfilby 15

एक web.config जोड़ना मेरे लिए इस त्रुटि को हल करने में मदद करता है।
रयान रोडेमॉय

2
इससे मेरी समस्या हल हो गई !!! आपका बहुत बहुत धन्यवाद! मेरे जैसे सभी newbyes के लिए: यह वास्तव में स्पष्ट ट्यूटोरियल का सुझाव दें: lourenco.co.za/blog/2013/08/…
Homer1982

12

समापन बिंदु में नाम स्थान भी होना चाहिए:

 <endpoint address="uri" binding="wsHttpBinding" contract="Namespace.Interface" />

मैं app.config में यह है, लेकिन मैं इसे app.config से हटाने के बिना कोड में बदलना चाहते हैं। नए समापन बिंदु पते के साथ नए ServiceHost का उपयोग करना एक त्रुटि देता है।
पॉल मैकार्थी

9

एक बात सोचने की है: क्या आपने अपने WCF को WindowsService (WS) से पूरी तरह से अनचाहा बना दिया है? एक WS दर्दनाक है क्योंकि आपके पास उन पर बहुत अधिक नियंत्रण या दृश्यता नहीं है। मैं अपने सभी वर्गों में अपने सभी गैर-WS सामान होने से इसे कम करने की कोशिश करता हूं, ताकि वे स्वतंत्र रूप से मेजबान WS का परीक्षण कर सकें। इस दृष्टिकोण का उपयोग करने से आपको किसी भी चीज को खत्म करने में मदद मिल सकती है जो कि विशेष रूप से WS रनटाइम बनाम आपकी सेवा के साथ हो रहा है।

जॉन की संभावना सही है कि यह एक .config फ़ाइल समस्या है। WCF हमेशा निष्पादन संदर्भ .config के लिए दिखेगा । इसलिए यदि आप अपने WCF को विभिन्न निष्पादन संदर्भों में होस्ट कर रहे हैं (यानी कंसोल एप्लिकेशन के साथ परीक्षण करें, और WS के साथ परिनियोजित करें), आपको यह सुनिश्चित करने की आवश्यकता है कि आपके पास WCF कॉन्फ़िगरेशन डेटा को उचित .config फ़ाइल में ले जाया गया है। लेकिन मेरे लिए अंतर्निहित मुद्दा यह है कि आप नहीं जानते कि समस्या क्या है क्योंकि WS goo रास्ते में हो जाता है। यदि आपने अभी तक इसके लिए मना नहीं किया है ताकि आप किसी भी संदर्भ में अपनी सेवा चला सकें (यानी, यूनिट टेस्ट या कंसोल), तो मैं ऐसा करना चाहूंगा। यदि आप एक इकाई परीक्षण में अपनी सेवा को आगे बढ़ाते हैं, तो यह संभवतः उसी तरह से विफल हो जाएगा जैसा कि आप WS के साथ देख रहे हैं जो कि yucky WS प्लंबिंग के साथ ऐसा करने के बजाय डिबग करना ज्यादा आसान है।


1
इतनी जल्दी जवाब देने के लिए धन्यवाद। मैंने अपने WCF (dll) से अपने app.config की नकल की, इसलिए मुझे नहीं लगता कि यह मुद्दा है। लेकिन मुझे यह अजीब लगता है कि मैं अपने WCF (dll) को बिना किसी समस्या के WcfTestclient.exe का उपयोग करके लाने में सक्षम हूं। यह मुझे लगता है कि अगर कुछ भी कॉन्फ़िगर फ़ाइल के साथ एक धुंध था, तो इसे वहां भी विफल होना चाहिए था, न कि केवल जब मैं इसे विंडोज सर्विस होस्ट (एक्सई) में चलाने की कोशिश करता हूं। मैं माफी माँगता हूँ अगर मैं एक "बिट" खो ध्वनि, मैं अभी भी WCF और सेवाओं की अवधि दुर्भाग्य से एक नौसिखिया हूँ। कोई अन्य सुझाव?
user280626

9

बस App.config फ़ाइल को सेवा प्रोजेक्ट से कंसोल होस्ट एप्लिकेशन पर कॉपी करें और यहां पेस्ट करें और फिर इसे सेवा परियोजना से हटा दें।


5

जब मैंने इसे प्रोग्रामेटिक रूप से जोड़ा तो मुझे अधिक विस्तृत अपवाद मिला - AddServiceEndpoint:

string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress));  

host.AddServiceEndpoint(typeof(MyNamespace.IService),
                        new BasicHttpBinding(), baseAddress);
host.Open();

1
धन्यवाद! इस तरह पते को पास करने से मुझे अपवाद का अधिक विवरण मिला। मेरे मामले में यह केवल यह था कि बंदरगाह का उपयोग एक और प्रक्रिया द्वारा किया गया था :)
हरन वीरस

मेरे पास एक ही समस्या है आधार पता वही है जो पते के समान है जब आप ऐड सर्विस संदर्भ में खोज पर क्लिक करते हैं?
जूमवायरस वायरस 22'14

4

WCF के लिए विन्यास तैयार करना कठिन है, और कभी-कभी एक सेवा प्रकार की परिभाषा किसी का ध्यान नहीं जाता है।

मैंने सर्विस टैग में केवल नाम स्थान लिखा है, इसलिए मुझे वही त्रुटि मिली।

<service name="ServiceNameSpace">

मत भूलो, सेवा टैग को पूरी तरह से योग्य सेवा वर्ग नाम की आवश्यकता है।

<service name="ServiceNameSpace.ServiceClass">

दूसरे लोगों के लिए जो मेरे जैसे हैं।


1
आपका मतलब है जैसे मैंने चार साल पहले यहां जवाब दिया था?
21

वे समान दिखते हैं लेकिन एक अंतर है। आपका गलत नमूना केवल वर्ग नाम ( TechResponse) लिखने के बारे में है लेकिन मेरा केवल नाम स्थान ( ServiceNameSpace) लिख रहा है ।
उरुउर अल्दनमाज़

4

आज मैं उसी मुद्दे पर भाग रहा हूं, यहां मेरी गलती और इसके सुधार के बारे में पोस्ट करना ताकि यह किसी की मदद कर सके।

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

यहाँ कोड स्निपेट है,

 ServiceHost myServiceHost = new ServiceHost(typeof(NewServiceClassName)); 

और सेक्शन सेवाओं के तहत App.config फ़ाइल में मैं पुराने सर्विसिक नाम का जिक्र कर रहा था, इसे मेरे लिए नई ServiceClassName निश्चित समस्या में बदल दिया।

  <service name="ProjectName.OldServiceClassName"> 
        <endpoint address="" binding="basicHttpBinding" contract="ProjectName.IService">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <host>
          <baseAddresses>
            <add baseAddress=""/>
          </baseAddresses>
        </host>
      </service>

मुझे भी। मैंने अपनी कक्षा और अनुबंध नाम और सब कुछ काम करने के पूंजीकरण को बदल दिया। धन्यवाद।
चाझक

3

मुझे भी यही समस्या थी। सब कुछ VS2010 में काम करता है लेकिन जब मैं VS2008 में एक ही प्रोजेक्ट चलाता हूं तो मुझे उल्लिखित अपवाद मिलता है।

मैंने अपने VS2008 प्रोजेक्ट में काम करने के लिए जो किया वह AddServiceEndpointमेरे ServiceHost ऑब्जेक्ट के सदस्य के लिए एक कॉल जोड़ रहा था ।

यहाँ मेरा कोड स्निपेट है:

Uri baseAddress = new Uri("http://localhost:8195/v2/SystemCallbackListener");

ServiceHost host = new ServiceHost(typeof(SystemCallbackListenerImpl), baseAddress);

host.AddServiceEndpoint(typeof(CsfServiceReference.SystemCallbackListener),
                        new BasicHttpBinding(),
                        baseAddress);
host.Open();

मैंने app.config फ़ाइल को संशोधित नहीं किया। लेकिन मुझे लगता है कि सेवा समापन बिंदु को .config फ़ाइल में भी जोड़ा जा सकता था।


जब मैं इस पद्धति का उपयोग करता हूं तो मुझे AddressAccessDeniedException मिलती है, भले ही मैं आपके लिए इस पते का उपयोग कर सकता हूं AddServiceReferance पता।
जूमविरस

2

मैंने बस अपनी सेवा में इस मुद्दे पर काम किया। यहाँ मैं प्राप्त कर रहा था त्रुटि है:

सेवा 'EmailSender.Wcf.EmailService' में शून्य अनुप्रयोग (गैर-अवसंरचना) अंतबिंदु है। ऐसा इसलिए हो सकता है कि आपके एप्लिकेशन के लिए कोई कॉन्फ़िगरेशन फ़ाइल नहीं मिली, या क्योंकि सेवा नाम से मेल खाने वाला कोई सेवा तत्व कॉन्फ़िगरेशन फ़ाइल में नहीं मिल सकता है, या इसलिए कि कोई अंतिम बिंदु सेवा तत्व में परिभाषित नहीं किए गए थे।

यहाँ दो चरण हैं जिन्हें मैंने इसे ठीक करने के लिए उपयोग किया है:

  1. सही पूरी तरह से योग्य वर्ग नाम का उपयोग करें:

    <service behaviorConfiguration="DefaultBehavior" name="EmailSender.Wcf.EmailService">
  2. मेक्सिको के साथ एक समापन बिंदु सक्षम करें, और सबसे महत्वपूर्ण बात, IMetadataExchange अनुबंध का उपयोग करें:

    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>

2

यह त्रुटि तब होगी जब आपकी WCF सेवा के होस्टिंग अनुप्रयोग की कॉन्फ़िगरेशन फ़ाइल में उचित कॉन्फ़िगरेशन नहीं है।

कॉन्फ़िगरेशन की इस टिप्पणी को याद रखें:

सेवा लायब्रेरी प्रोजेक्ट को परिनियोजित करते समय, कॉन्फ़िग फ़ाइल की सामग्री को होस्ट के app.config फ़ाइल में जोड़ा जाना चाहिए। System.Configuration पुस्तकालयों के लिए कॉन्फ़िगर फ़ाइलों का समर्थन नहीं करता है।

यदि आपके पास IIS में होस्ट की गई WCF सेवा है, तो रन-वे के दौरान VS.NET के माध्यम से यह ऐप को पढ़ेगा। सर्विस लाइब्रेरी प्रोजेक्ट को पढ़े, लेकिन एक बार तैनात होस्ट के web.config को पढ़ें। यदि web.config में समान <system.serviceModel>कॉन्फ़िगरेशन नहीं है, तो आपको यह त्रुटि मिलेगी। एक बार पूर्ण होने के बाद app.config से कॉन्फ़िगरेशन की प्रतिलिपि बनाना सुनिश्चित करें।


2

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

उदाहरण के लिए: यदि वर्ग का नाम कैलक्यूलेटर सेवा है और कॉन्फ़िगरेशन फ़ाइल गणनाकर्ताओं को संदर्भित करता है ... तो आपको यह त्रुटि मिलेगी।


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

2

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


इसने मुझे बहुत समय बचाया है। :)
पराग

1

मेरी समस्या तब थी जब मैंने अपने डिफ़ॉल्ट Service1 वर्ग का नाम बदलकर .vc फाइल को एक और अधिक सार्थक नाम दिया, जिसके कारण web.config व्यवहारसंपर्क और पुराने नामकरण सम्मेलन के अनुरूप समापन बिंदु हुआ। अपने web.config को ठीक करने का प्रयास करें।


1

WCF सेवा की मेजबानी के लिए कंसोल एप्लिकेशन के साथ काम करने वालों के लिए याद रखने वाली एक महत्वपूर्ण बात यह है कि WCF प्रोजेक्ट में Web.config फ़ाइल को पूरी तरह से अनदेखा कर दिया जाता है। यदि आपका system.serviceModelकॉन्फ़िगरेशन है, तो आपको अपने कंसोल प्रोजेक्ट के कॉन्फ़िगरेशन के उस भाग को App.config में स्थानांतरित करना होगा ।

यह सही स्थानों पर नाम स्थान सुनिश्चित करने से संबंधित उत्तरों के अतिरिक्त है।


1

एक अन्य सुराग के रूप में, जिसने वास्तव में इस मामले को मेरे मामले में ठीक कर दिया।

मैं कुछ WCF सेवाओं को कंसोल एप्लिकेशन (जो कुछ WCF सेवाओं में कॉन्फ़िगर करता है) से Azure WebRole में Azure में प्रकाशित करने के लिए माइग्रेट कर रहा हूं। हर बार जब मैं एक नई सेवा जोड़ता हूं तो VS मेरे web.config को संपादित करता है और इस लाइन को जोड़ता है:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true">

ठीक है, ऊपर की सभी सलाह और जवाब के साथ, मैं तब तक काम नहीं कर सका जब तक कि मैंने सर्विसहोस्टिंग एंवायरमेंट तत्व में सभी विशेषताओं को नहीं हटा दिया। जैसा कि आप देख सकते हैं कि मैं एक WCF रॉकस्टार नहीं हूं, लेकिन मैंने इसे पहले सेवा के साथ काम करने के लिए बनाया है:

<service name="FirstService" behaviorConfiguration="metadataBehavior">
                <endpoint address=""
                 binding="wsHttpBinding"
                 bindingConfiguration="WSHttpBinding_WcfServicesBinding"
                 contract="IFirstService" />

            </service>

लेकिन जब मैंने दूसरी सेवा को जोड़ा तो यह काम करना बंद कर दिया और मुझे एहसास हुआ कि उन विशेषताओं को फिर से वहीं।

मुझे आशा है कि यह आपको समय बचाता है।


0

मुझे Windows सेवा में यह त्रुटि तब हुई जब मेरी WCF सेवा लाइब्रेरी जो मैंने बनाई थी, होस्टिंग के लिए कनेक्ट नहीं थी, लेकिन कनेक्शन के लिए कनेक्ट थी। मुझे एक समापन बिंदु याद आ रहा था। (मैं अपनी Windows सेवा में कनेक्शन और होस्टिंग दोनों चाहता था ताकि मैं अन्य कनेक्शनों के लिए WCF सेवा की सेवा कर सकूं, साथ ही मेरी Windows सेवा की मुख्य प्रक्रिया का उपयोग टाइमर / शेड्यूल पर विभिन्न कार्यों को करने के लिए भी किया जा सकता है।)

तय यह था कि मैंने अपनी App.config फ़ाइल को राइट-क्लिक किया और WCF कॉन्फ़िगरेशन को संपादित किया। फिर, मैंने Create Service के लिए कदम उठाए ताकि मैं अपनी WCF सेवा से जुड़ सकूं। अब मेरे App.config में दो समापन बिंदु थे, न कि केवल एक। एक समापन बिंदु WCF सेवा लाइब्रेरी के कनेक्शन के लिए था, और दूसरा इसकी मेजबानी के लिए था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.