WCF त्रुटि - अनुबंध 'UserService.UserService' को संदर्भित करने वाले डिफ़ॉल्ट समापन बिंदु तत्व नहीं मिल सका


98

इसे ठीक करने का कोई तरीका?

UserService.UserServiceClient userServiceClient = new UserServiceClient();
            userServiceClient.GetUsersCompleted += new EventHandler<GetUsersCompletedEventArgs>(userServiceClient_GetUsersCompleted);
            userServiceClient.GetUsersAsync(searchString);

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_UserService" 
                     maxBufferSize="2147483647" 
                     maxReceivedMessageSize="2147483647">
                <security mode="None" />
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:52185/UserService.svc" 
                  binding="basicHttpBinding" 
                  bindingConfiguration="BasicHttpBinding_UserService" 
                  contract="UserService.UserService"
                  name="BasicHttpBinding_UserService" />
    </client>
    <behaviors>
        <serviceBehaviors>
            <behavior name="Shell.Silverlight.Web.Service3Behavior">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <services>
        <service behaviorConfiguration="Shell.Silverlight.Web.Service3Behavior" 
                 name="Shell.Silverlight.Web.Service3">
            <endpoint address="" 
                      binding="basicHttpBinding" 
                      contract="Shell.Silverlight.Web.Service3" />
            <endpoint address="mex" 
                      binding="mexHttpBinding" 
                      contract="IMetadataExchange" />
        </service>
    </services>
</system.serviceModel>

ServiceModel क्लाइंट कॉन्फ़िगरेशन सेक्शन में 'UserService.UserService' अनुबंध का संदर्भ देने वाले डिफ़ॉल्ट समापन बिंदु तत्व नहीं मिल सका। ऐसा इसलिए हो सकता है क्योंकि आपके एप्लिकेशन के लिए कोई कॉन्फ़िगरेशन फ़ाइल नहीं मिली, या क्योंकि इस अनुबंध से मेल खाने वाला कोई समापन बिंदु तत्व क्लाइंट तत्व में नहीं मिल सकता है।

हल!

मैंने यह उल्लेख नहीं किया कि यह सिल्वरलाइट अनुप्रयोग था। मेरे पास एक DLL में wcf संदर्भ था जो कि "ServiceReferences.ClientConfig" फ़ाइल के मालिक थे। मैंने DLL के ServiceReferences.ClientConfig की सामग्री को मुख्य सिल्वरलाइट प्रोजेक्ट में स्थानांतरित कर दिया और यह काम कर गया।


क्या होगा यदि DLL चलाने वाला एप्लिकेशन थर्ड पार्टी है, उदाहरण के लिए DLL दूसरे एप्लिकेशन के लिए एक प्लगइन है?
स्टेफानोस कारगास

जवाबों:


186

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

समाधान सरल है। सिल्वरलाइट एप्लिकेशन की कॉन्फिगर फाइल के लिए क्लास लाइब्रेरी के कॉन्फिगर फाइल (जैसे ServiceReferences.ClientConfig) से एंडपॉइंट परिभाषाओं को कॉपी करें। मुझे पता है कि आप ऐसा करने के बिना काम करने की उम्मीद करेंगे, लेकिन जाहिर तौर पर रेडमंड के किसी व्यक्ति की उस दिन छुट्टी थी।


50
यह समाधान ASP.NET और MVC प्रोजेक्ट्स के लिए भी मान्य है। यदि आप एक क्लास लाइब्रेरी में सेवा जोड़ते हैं तो यह बॉक्स से बाहर काम नहीं करेगा, अपने पुस्तकालय प्रोजेक्ट में app.config से system.serviceModel सेक्शन को पकड़ो और इसे अपने web.config में डालें।
एडम पोप

5
ऐसा लगता है कि यह किसी भी तरह की परियोजना के लिए सच है, मैं विंडोज़ सेवा के रूप में क्वार्ट्ज.नेट का उपयोग कर रहा था और एक अलग विधानसभा पर एक नौकरी थी जो वेब सेवा का संदर्भ दे रही थी। इसने मेरे लिए भी काम किया। धन्यवाद।
थियागोलेइट

2
नमस्ते, यह एक विंडोज फोन परियोजना के लिए भी काम किया। जैसा कि @thiagoleite का कहना है कि ऐसा लगता है कि यह अधिकांश प्रोजेक्ट प्रकारों के लिए काम कर रहा है।
थुुष्का

3
Redmond vacation के मजाक के लिए +1 ... वैसे भी, क्या इसे खेलने के बजाय बाहरी फ़ाइल के रूप में जोड़ने का कोई तरीका है web.config?
शमी वेइटहैंडलर

1
@sprite मैंने कोड में अपनी आवश्यक सेटिंग्स सेट करना समाप्त कर दिया है (मैंने क्लाइंट कंस्ट्रक्टर को ओवरराइड किया है), विशाल के जवाब के रूप में । इस तरह यह असेंबलियों के पार भेज दिया जाता है। धन्यवाद!
शिम्मी वीटहैंडलर

45

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

BasicHttpBinding basicHttpbinding = new BasicHttpBinding(BasicHttpSecurityMode.None);
basicHttpbinding.Name = "BasicHttpBinding_YourName";
basicHttpbinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
basicHttpbinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;

EndpointAddress endpointAddress = new EndpointAddress("http://<Your machine>/Service1/Service1.svc");
Service1Client proxyClient = new Service1Client(basicHttpbinding,endpointAddress);

@wooncherk, मेरी क्लास लाइब्रेरी में सिर्फ wsdl का संदर्भ है। मुझे यह कोड कहां रखना चाहिए? मैं इसे C # dll में बनाता हूं और dll को अपनी ऐप फाइलों में डालता हूं, जहां मैं इसे IronPython से संदर्भित करता हूं। धन्यवाद
Срба

12

यदि किसी को WPF (WCF या सिल्वरलाइट के बजाय) का उपयोग करते हुए कोई समस्या आती है तो बस:

वेब सेवा से कनेक्ट होने पर मुझे यह त्रुटि हुई। जब मेरा कोड "मुख्य" WPF अनुप्रयोग समाधान में था, तो कोई समस्या नहीं, यह पूरी तरह से काम करता था। लेकिन जब मैंने कोड को अधिक समझदार डीएएल-लेयर समाधान में स्थानांतरित किया, तो यह अपवाद को फेंक देगा।

डिफ़ॉल्ट समापन बिंदु तत्व नहीं मिल सका जो ServiceModel कॉन्फ़िगरेशन कॉन्फ़िगरेशन अनुभाग में अनुबंध 'MyWebService.MyServiceSoap' का संदर्भ देता है। ऐसा इसलिए हो सकता है क्योंकि आपके एप्लिकेशन के लिए कोई कॉन्फ़िगरेशन फ़ाइल नहीं मिली, या क्योंकि इस अनुबंध से मेल खाने वाला कोई समापन बिंदु तत्व क्लाइंट तत्व में नहीं मिल सकता है।

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

WPF ऐप्स के लिए, इसका अर्थ है कि मेरे DAL समाधान में app.config से ऐप की टैग कॉपी करना । मुख्य WPF अनुप्रयोग समाधान में app.config


यह बहुत अच्छा है, लेकिन मेरे अपने जवाब के तहत एक छोटी टिप्पणी के रूप में बेहतर होगा, जैसे "एडम पोप" ने किया। यह बहुत अधिक लोगों द्वारा पढ़ा जाएगा।
स्प्राइट

2
@sprite: मैंने एक टिप्पणी जोड़ी होगी, लेकिन StackOverflow टिप्पणियाँ हमेशा एक लंबे पैराग्राफ के रूप में दिखाई जाती हैं। मेरे जैसे 5-पैरा उत्तर के लिए, जिसके परिणामस्वरूप एक लंबा, अपठनीय, अमित्र पैराग्राफ होगा। अलग प्रतिक्रिया लिखने से मुझे एक स्पष्ट जवाब देने की अनुमति मिली, जो अन्य उपयोगकर्ताओं की मदद करने की अधिक संभावना है (जो, चलो इसका सामना करते हैं, इस तरह की वेबसाइटों का बिंदु है)
माइक गिल्डहिल

6

मैं उसी मुद्दे में भाग गया, जिस कारण से जब मैंने पहली बार सेवा को जोड़ा तो विजुअल स्टूडियो ने वेब कॉन्फिग को अपडेट नहीं किया। मैंने पाया कि सेवा संदर्भ को अद्यतन करना भी इस समस्या को ठीक करता है।

कदम:

  1. सेवा संदर्भ फ़ोल्डर पर नेविगेट करें
  2. इसका विस्तार करें
  3. राइट क्लिक करें और अपडेट सेवा संदर्भ चुनें
  4. वेब कॉन्‍फ़िगर को अपडेट किया जाए

हां, इसने मेरे लिए चाल चली। मैं एक 3rd पार्टी wsdl सेवा संदर्भ का उपयोग कर रहा हूं और जब तक मैं सेवा संदर्भ को अपडेट नहीं करता, तब तक यह त्रुटि हो रही थी
ejhost

मेरे लिए भी। यह स्पष्ट था क्योंकि यह ठीक काम करता है और अचानक नहीं। मैंने एक बदलाव किया है और सेवा संदर्भ को अद्यतन नहीं किया है।
एह

4

WCF सेवा के web.config को "समापन बिंदु पते =" "बाइंडिंग =" basicHttpBinding "के रूप में बदलें ..." (पूर्व में बाइंडिंग = "wsHttpBinding") "ServiceReferences .ClientConfig" "" कॉन्फ़िगरेशन का मान है। । फिर ठीक चलेगा।


3

App.config के लिए svcutil.exe द्वारा उत्पादित output.config का नाम बदलें। यह मेरे लिए काम किया।


2

क्या आपके पास एक इंटरफ़ेस है जो आपके "उपयोगकर्ता सेवा" वर्ग को लागू करता है।

आपके समापन बिंदु को अनुबंध विशेषता के लिए एक इंटरफ़ेस निर्दिष्ट करना चाहिए:

contract="UserService.IUserService"


1

यकीन नहीं है कि यह वास्तव में एक समस्या है, लेकिन मुझे लगता है कि आपके पास आपके बंधन कॉन्फ़िगरेशन () के लिए एक ही नाम है।

मैं आमतौर पर अपने एंडपॉइंट्स को "UserServiceBasicHttp" या कुछ इसी तरह ("बाइंडिंग" वास्तव में यहाँ करने के लिए कुछ भी नहीं है) को कॉल करने की कोशिश करता हूं, और मैं अपने बाध्यकारी कॉन्फ़िगरेशन को ".... कॉन्फ़िगरेशन", जैसे से कॉल करने की कोशिश करता हूं। "UserServiceDefaultBinding", किसी भी संभावित नाम से बचने के लिए।

न घुलनेवाली तलछट


0

यह काम करने के लिए कॉलिंग App.config फ़ाइल में सेवा को जोड़ना पड़ा। सुनिश्चित करें कि आप लेकिन यह सब के बाद। यह मेरे लिए काम करने लगा।


0

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

Configuration config = new Configuration(dataRowSet[0]["ServiceUrl"].ToString());

var remoteAddress = new System.ServiceModel.EndpointAddress(config.Url);


SimpleService.PayPointSoapClient client = 
    new SimpleService.PayPointSoapClient(new System.ServiceModel.BasicHttpBinding(), 
    remoteAddress);
SimpleService.AccountcredResponse response = client.AccountCred(request);

0

जो लोग एएक्स 2012 एआईएफ सेवाओं के साथ काम करते हैं और एएक्स (एक्स ++) के अंदर सी # या वीबी प्रोजेक्ट को कॉल करने की कोशिश करते हैं और " इस तरह की त्रुटियों से पीड़ित हैं " डिफ़ॉल्ट समापन बिंदु नहीं मिल सका " ... या " कोई अनुबंध नहीं मिला " ... वापस जाएं अपने विजुअल स्टूडियो (# #) प्रोजेक्ट के लिए और अपने ग्राहक सेवा को परिभाषित करने से पहले इन पंक्तियों को जोड़ें, फिर परियोजना को तैनात करें और AX क्लाइंट को पुनः आरंभ करें और पुन: प्रयास करें: ध्यान दें, उदाहरण नेटटैप एडाप्टर के लिए है , आप अपनी आवश्यकता के अनुसार किसी अन्य एडाप्टर का आसानी से उपयोग कर सकते हैं। ।

 Uri Address = new Uri("net.tcp://your-server:Port>/DynamicsAx/Services/your-port-name");
 NetTcpBinding Binding = new NetTcpBinding();
 EndpointAddress EndPointAddr = new EndpointAddress(Address);
 SalesOrderServiceClient Client = new SalesOrderServiceClient(Binding, EndPointAddr);

-2

यदि आप PRISM फ्रेमवर्क का उपयोग करके WPF एप्लिकेशन का उपयोग कर रहे हैं, तो कॉन्फ़िगरेशन आपके स्टार्ट अप प्रोजेक्ट में मौजूद होना चाहिए (यानी उस प्रोजेक्ट में जहां आपका बूटस्ट्रैपर रहता है।)

संक्षेप में बस इसे क्लास लाइब्रेरी से हटा दें और स्टार्ट अप प्रोजेक्ट में डाल दें।

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