2009-03-27 13 views
50

The contract name 'IMyService' could not be found in the list of contracts implemented by the service 'MyService'.. ---> System.InvalidOperationException: The contract name 'IMyService' could not be found in the list of contracts implemented by the service 'MyService'.डब्ल्यूसीएफ अनुबंध नाम 'IMyService' नहीं मिला?

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

यहां ध्यान देने योग्य एक बात यह है कि क्लाइंट के रूप में वेब ब्राउज़र में सेवा तक पहुंचने का प्रयास करते समय भी मुझे यह त्रुटि मेरे वीएम पर मिलती है।

नोट: मैं प्रिंसिपल प्रिमिशनमोड = "यूज विन्डोज समूह" का उपयोग कर रहा हूं, लेकिन यह मेरी स्थानीय मशीन पर कोई समस्या नहीं है। मैं बस खुद को उपयुक्त विंडोज समूह में जोड़ता हूं। लेकिन मेरे वीएम पर कोई भाग्य नहीं है।

कॉन्फ़िग:

<configuration> 
    <system.serviceModel> 
     <diagnostics> 
      <messageLogging logEntireMessage="false" maxSizeOfMessageToLog="2147483647" /> 
     </diagnostics> 
     <services> 
      <service behaviorConfiguration="MyServiceBehaviors" name="MyService"> 
       <endpoint binding="basicHttpBinding" bindingConfiguration="basicHttpBinding" 
        name="MyService" bindingName="basicHttpBinding" bindingNamespace="http://my.test.com" 
        contract="IMyService"> 
       </endpoint> 
      </service> 
     </services> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="basicHttpBinding" maxReceivedMessageSize="2147483647"> 
        <readerQuotas maxStringContentLength="2147483647" /> 
        <security mode="TransportCredentialOnly"> 
         <transport clientCredentialType="Windows" proxyCredentialType="None" /> 
        </security> 
       </binding> 
      </basicHttpBinding> 
      <netTcpBinding> 
       <binding name="WindowsClientOverTcp" maxReceivedMessageSize="2147483647"> 
        <readerQuotas maxStringContentLength="2147483647" /> 
       </binding> 
      </netTcpBinding> 
      <wsHttpBinding> 
       <binding name="wsHttpBinding" maxReceivedMessageSize="2147483647"> 
        <readerQuotas maxDepth="32" maxStringContentLength="2147483647" 
         maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       </binding> 
      </wsHttpBinding> 
     </bindings> 
     <behaviors> 
      <serviceBehaviors> 
       <behavior name="MyServiceBehaviors"> 
        <serviceMetadata httpGetEnabled="true" /> 
        <serviceAuthorization principalPermissionMode="UseWindowsGroups" 
         impersonateCallerForAllOperations="false" /> 
        <serviceCredentials /> 
       </behavior> 
      </serviceBehaviors> 
     </behaviors> 
    </system.serviceModel> 
</configuration> 
+0

क्या इंटरफ़ेस के साथ असेंबली एप्लिकेशन के लिए दृश्यमान है? साथ ही, क्या आपने कॉन्फ़िगरेशन फ़ाइल में इंटरफ़ेस नाम के हिस्से के रूप में नामस्थान निर्दिष्ट किया था? – casperOne

उत्तर

0

आप किसी भी प्रमाणीकरण IIS में अपने वी एम पर स्थापित है? इसे अनाम में सेट करने का प्रयास करें और देखें कि यह चल रहा है या नहीं।

+0

मैंने अज्ञात कोशिश की और आईआईएस को पुनरारंभ किया। अभी भी एक ही त्रुटि। thx – M3NTA7

+0

क्या आप अपना system.serviceModel कॉन्फ़िगरेशन अनुभाग पोस्ट कर सकते हैं? – bendewey

+0

मैंने ऊपर अपनी पोस्ट में system.serviceModel जोड़ा है। कृपया देख लीजिये। – M3NTA7

0

ठीक है, यह वास्तव में मेरे प्रश्न को पूरा नहीं करता है, लेकिन एक तरीका जिसे मैंने हल करने के लिए पाया था .NET 3.5 स्थापित करना था। क्योंकि मेरे दोनों अन्य वातावरण 3.0 था।

तो मैंने वास्तव में यह निर्धारित नहीं किया है कि यह एक पर्यावरण में क्यों काम करेगा, न कि अन्य, विशेष रूप से उस इंटरफ़ेस त्रुटि के साथ।

आंकड़े जाओ?

1

क्या आप अपने इंटरफ़ेस का कोड पोस्ट कर सकते हैं ...? सामान्य रूप से ऐसा होता है यदि आपने अपने इंटरफ़ेस में ServiceContract विशेषता निर्दिष्ट नहीं की है ...

8

क्या एंडपॉइंट पर अनुबंध विशेषता पूरी तरह से योग्य नामस्थान होने की आवश्यकता नहीं है?

+1

यह मेरी समस्या का समाधान भी था। भ्रमित करने वाला यह था कि ऑनलाइन कई उदाहरणों में नामस्थान शामिल नहीं था। – angularsen

+0

यह मेरी समस्या का समाधान भी था। – yonexbat

6

हाँ @ गैरी आप सही हैं। अंतिम बिंदु में अनुबंध पूरी तरह से योग्य नाम

<endpoint binding="basicHttpBinding" bindingConfiguration="basicHttpBinding"  name="MyService" bindingName="basicHttpBinding" bindingNamespace="http://my.test.com" contract="Namespace.IMyService"> 
32

@Garry (थोड़ी देर हो चुकी, मुझे पता है)

होना चाहिए अपने ServiceContract विशेषता एक ConfigurationName को परिभाषित करता है, तो यह अंत बिंदु में मूल्य, नहीं पूरी तरह से होना चाहिए योग्य नाम ओपी द्वारा वर्णित अब मुझे यह समस्या थी, और यह मेरे लिए समाधान था। उम्मीद है कि यह किसी और की मदद करता है जो इस पर ठोकर खाता है।

+2

इस उत्तर ने मुझे मेरी समस्या का समाधान करने में मदद की। अनुबंध इंटरफ़ेस पर 'ServiceContractAttribute' ने' नाम ',' नामस्थान 'और' कॉन्फ़िगरेशन नाम 'के मानों को परिभाषित किया था। मैंने मिलान करने के लिए कार्यान्वयन सेवा के web.config में 'endpoint' तत्व' पर 'name', 'बाध्यकारी नामस्थान' और' अनुबंध 'बदल दिया और समस्या हल हो गई। – GiddyUpHorsey

+0

इसके लिए धन्यवाद, जब तक मुझे यह पता नहीं चला, आधे घंटे तक एक ईंट की दीवार से मेरे सिर को टक्कर लगी थी। – bplus

+0

ने कॉन्फ़िगरेशन बाध्यकारी का नाम बदल दिया लेकिन ServiceContract विशेषता में कॉन्फ़िगरेशन नाम और यह समस्या थी .. नाम संघर्ष को ठीक करना समाधान था, hurray! मेरे मामले में – Erikest

101

[ServiceContract] मेरे मामले में गायब था।

+0

भी :) –

+0

यह भी मेरे साथ हुआ। मैंने app.config की समीक्षा करने में कुछ मिनट बिताए क्योंकि त्रुटि बहुत स्पष्ट नहीं थी: \। – Megacan

+6

ARGH !!!! यह सब नरक के लिए दुखी है, ... मैं इस हर sodding समय से पकड़ा! धन्यवाद :-) – Stimul8d

13

यह एक से थोड़ा अधिक असामान्य समाधान, कि एक ही त्रुटि के साथ मेरी स्थिति के लिए आवेदन किया है:

यह है कि अनुबंध नाम स्थान निम्न विशेषता के साथ, अधिरोहित जा सकता है संभव है:

[System.ServiceModel.ServiceContractAttribute([...], ConfigurationName = "IServiceSoap")] 
public interface ISomeOtherServiceName 

कौन होगा आवश्यकता होती है:

<endpoint address="" binding="basicHttpBinding" contract="IServiceSoap" /> 

बल्कि सामान्य (नाम स्थान) की तुलना में .ISomeOtherServiceName

यह कोड पीढ़ी का एक परिणाम हो सकता है, मेरे मामले WSCFBlue

+1

यह मेरा मामला कॉन्फ़िगरेशन 2 घंटे –

1

में मैं एक ही त्रुटि थी लेकिन समस्या के स्रोत अलग था। मैं सीख रहा था जैसे मैं जा रहा था और मैंने पहली बार विजुअल स्टूडियो में सिल्वरलाइट टेम्पलेट्स से सिल्वरलाइट-सक्षम डब्ल्यूसीएफ सेवा का उपयोग करके एक सेवा बनाई थी। मैंने इस क्षेत्र सेवा को बुलाया। जब आप इस तरह से एक सेवा बनाने web.config नीचे के रूप में बदल दिया जाता है:

<services> 
     <service name="Services.TerritoryService"> 
     <endpoint address="" binding="customBinding" bindingConfiguration="Services.TerritoryService.customBinding0" 
      contract="Services.TerritoryService" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 

उदाहरण है कि इम बंद काम कर रहा है लेकिन DomainServices.i.e का उपयोग करें। इनका उपयोग करते समय आप डोमेन सेवा से प्राप्त होते हैं। इसलिए मैंने उस क्षेत्र सेवा को हटा दिया जिसे मैंने बनाया था और फिर विजुअल स्टूडियो में वेब टेम्पलेट मेनू से टेम्पलेट से एक डोमेन सेवा क्लास बनाया था। मैं काम पर ले गया और सबकुछ ठीक से संकलित किया। लेकिन जब मैंने इसे चलाया तो मुझे इस प्रश्न के शीर्षक के अनुसार एक त्रुटि मिली।

समस्या यह पता चला है कि जब आप किसी डोमेन सेवा से प्राप्त होते हैं तो ऐसी कोई प्रविष्टि web.config फ़ाइल में नहीं बनाई जाती है। इसकी आवश्यकता नहीं है। लेकिन जब आप सिल्वरलाइट-सक्षम वेब सेवा के माध्यम से बनाई गई सेवा को हटाते हैं तो यह web.config फ़ाइल में प्रविष्टि को हटा नहीं देता है।

इसलिए क्योंकि मैंने दोनों सेवाओं को क्षेत्रीय सेवा का नाम दिया था जब सेवा को वेब.कॉन्फिग में प्रवेश कहा जा रहा था, खेल में खींचा गया था और सर्वर उस तरीके से परिभाषित एक सेवा की तलाश में चला गया जो मुझे नहीं मिला क्योंकि मेरे पास इसे हटा दिया

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

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

+0

के बाद हल करने के लिए एक गड़बड़ पैदा हुआ सही रास्ता। मुझे यह त्रुटि मिली: 1) मैंने एक सामान्य डब्ल्यूसीएफ सेवा बनाई (जिसने मेरा web.config अपडेट किया)। 2) फिर मैंने उस सेवा को हटा दिया। 3) फिर मैंने एक ही नाम के साथ एक डब्ल्यूसीएफ डाटा सेवा बनाई। Web.config परिवर्तन को हटाने से मुझे ठीक किया गया। –

0

मेरे मामले में 2 गलतियों नहीं है:

  1. config वर्गों एक और प्रॉक्सी परियोजना से नकल कर रहे हैं, और मैं पूरा पथ के लिए नाम स्थान को बदलने के लिए भूल गया था।

  2. क्लाइंट के रूप में, मैंने एंडपॉइंट सेक्शन को नोड में कॉपी किया - क्लाइंट भी एक डब्ल्यूसीएफ सेवा है।

3

मैं यह कर की आदत है ...

<system.serviceModel> 
    <services> 
     <service name="Service" behaviorConfiguration="wsHttpBehaviour"> 
     <endpoint 
      binding="wsHttpBinding" 
      contract="IService" 
      bindingConfiguration="wsHttpBinding" 
      /> 
     <endpoint contract="IService" binding="mexHttpBinding" address="mex" /> 
     </service> 

जब मैं ऐसा करने चाहिए ...

<system.serviceModel> 
    <services> 
     <service name="namespace.Service" behaviorConfiguration="wsHttpBehaviour"> 
     <endpoint 
      binding="wsHttpBinding" 
      contract="namespace.IService" 
      bindingConfiguration="wsHttpBinding" 
      /> 
     <endpoint contract="namespace.IService" binding="mexHttpBinding" address="mex" /> 
     </service> 

देखें मैं क्या मतलब है ... यह बेवकूफ है चीज कभी (विशेष रूप से जब ऐप में केवल 1 या 2 आइटम होते हैं) लेकिन एक "पूरी तरह से योग्य" वर्गनाम सभी अंतर करने लगता है।

8

सेवा तत्व में आपका नाम विशेषता और एंडपॉइंट तत्व में अनुबंध विशेषता सही नहीं है।वे पूरी तरह से योग्य नाम होने की जरूरत:

<service name="namespace.MyService"> 
     <endpoint contract="namespace.IMyService" > 

एक बार जब आप बदल मूल्यों पूरी तरह से योग्य नामों को अपनी त्रुटि का समाधान करना चाहिए किया जाना है।

+0

यह कॉन्फ़िगरेशन सही है; +1000 – CompanyDroneFromSector7G

1

मेरे मामले में, समस्या एक गलत नामस्थान नाम था। एचटीएच

1

दृश्य स्टूडियो 2013 "एड" का उपयोग करना -> "सेवा" मेनू विकल्प ने मेरे लिए वेब कॉन्फ़िगरेशन अनुभाग बनाए लेकिन कंक्रीट क्लास के नाम पर सेट "एंडपॉइंट" "अनुबंध" के साथ इंटरफ़ेस नहीं।

जैसे ही मैंने सही किया कि सभी ने काम करना शुरू कर दिया।

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