यह HTTP प्रोटोकॉल का उपयोग न करके सर्विस एंडपॉइंट बाइंडिंग के कारण हो सकता है


87

मेरे पास एक WCF सेवा है जो मेरे स्थानीय मशीन पर ठीक चल रही है। मैंने इसे सर्वरों पर डाला, और मुझे निम्नलिखित त्रुटि प्राप्त हो रही है:

Http: //xx.xx.x.xx: 8200 / Services / WCFClient.svc की HTTP प्रतिक्रिया प्राप्त करते समय एक त्रुटि हुई । यह HTTP प्रोटोकॉल का उपयोग नहीं करने वाले सर्विस एंडपॉइंट बाइंडिंग के कारण हो सकता है। यह एक HTTP अनुरोध संदर्भ सर्वर द्वारा निरस्त किए जाने के कारण भी हो सकता है (संभवतः सेवा बंद होने के कारण)। अधिक विवरण के लिए सर्वर लॉग देखें।]

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

<binding name="basicHttpBinding_IWCFClient" closeTimeout="00:01:00"
         openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
         bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
         maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
         messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
         allowCookies="false">
    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
                  maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
                  maxNameTableCharCount="2147483647" />
    <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
    </security>
</binding>
<endpoint name="basicHttpBinding_IWCFClient" 
    address="http://localhost:4295/Services/WCFClient.svc"
    binding="basicHttpBinding" 
    bindingConfiguration="basicHttpBinding_IWCFClient" 
    behaviorConfiguration="WCFGraphicManagementTool.Services.ClientBehavior"
    contract="WCFClient.IWCFClient" />

यहाँ मेरा सर्वर विन्यास है:

<service behaviorConfiguration="WCFGraphicManagementTool.Services.WCFClientBehavior"
    name="WCFGraphicManagementTool.Services.WCFClient">
   <endpoint name="basicHttpBinding_IWCFClient"
       address="" 
       binding="basicHttpBinding" 
       contract="WCFGraphicManagementTool.Contracts.IWCFClient" />
   <endpoint 
       address="mex" 
       binding="mexHttpBinding" 
       contract="IMetadataExchange" />
</service>
<behavior name="WCFGraphicManagementTool.Services.WCFClientBehavior">
   <dataContractSerializer maxItemsInObjectGraph="2147483647" />
   <serviceThrottling maxConcurrentCalls="120" maxConcurrentSessions="120"
                      maxConcurrentInstances="120" />
   <serviceMetadata httpGetEnabled="true" />
   <serviceDebug includeExceptionDetailInFaults="true" />
</behavior>

क्या यह सर्वर पर एक सेटिंग होगी क्योंकि यह मेरी स्थानीय मशीन पर काम करता है?


मैंने अपना मुद्दा हल किया जैसा कि मैंने यहाँ बताया: stackoverflow.com/questions/5537794/…
Adi

लगता है कि तुम मुझसे आगे निकल गए। शायद आप मुझे एक संकेत दे सकते हैं कि आगे क्या करना है। stackoverflow.com/questions/16628382/…
नील्स ब्रिंच

कोई भी मौका आप किसी भी उत्तर को स्वीकार करेंगे, क्योंकि मुझे संदेह है कि आप अभी भी एक पाने के लिए इंतजार कर रहे हैं? :)
नोक्टिस

जवाबों:


100

मुझे लगता है कि क्रमबद्धता की समस्या है, आप सटीक त्रुटि पा सकते हैं बस <configuration>अनुभाग में सेवा कॉन्फ़िगरेशन में कोड जोड़ने की आवश्यकता है ।

कॉन्फ़िगर करने के बाद अपडेट "App_tracelog.svclog"फ़ाइल बन जाएगी, जहां आपकी सेवा मौजूद है बस .svclogफ़ाइल खोलने और बाईं ओर पैनल पर लाल रंग की लाइन खोजने की आवश्यकता है जो त्रुटि है और अधिक जानकारी के लिए इसका विवरण देखें।

मुझे आशा है कि यह आपकी त्रुटि खोजने में मदद करेगा।

<system.diagnostics>
    <sources>
      <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
        <listeners>
          <add name="ServiceModelTraceListener" />
        </listeners>
      </source>
      <source name="System.ServiceModel" switchValue="Verbose,ActivityTracing">
        <listeners>
          <add name="ServiceModelTraceListener" />
        </listeners>
      </source>
      <source name="System.Runtime.Serialization" switchValue="Verbose,ActivityTracing">
        <listeners>
          <add name="ServiceModelTraceListener" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add initializeData="App_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp" />
    </sharedListeners>
  </system.diagnostics>

4
इससे मेरा दिन वास्तव में बच गया। यह वास्तव में एक क्रमांकन समस्या थी, और मुझे System.Runtime.Serializationअपने ट्रेस में स्रोत याद आ रहा था ।
14

नाइस ... इस बारे में पता नहीं था :)
Noctis

महाकाव्य! वह त्रुटि लिखता है, जो किसी भी अपवाद में उपलब्ध नहीं है, App_tracelog.svclog फ़ाइल में
fubo

प्रतिभाशाली! धन्यवाद
सिंटैक्स त्रुटि

1
ऊपर दिए गए <system.diagnostics>अनुभाग को फ़ाइल के अंत में पेस्ट करना सुनिश्चित करें </configuration>। यदि आप इसे शीर्ष पर चिपकाते हैं, तो आपको अपना ऐप चलाते समय एक सामग्री प्रकार की त्रुटि मिल सकती है।
तवाब वाकिल

75

मुझे यह समस्या थी "यह HTTP प्रोटोकॉल का उपयोग नहीं करने वाले सर्विस एंडपॉइंट बाइंडिंग के कारण हो सकता है" और WCF सेवा बंद हो जाएगी (एक विकास मशीन में)

मुझे पता चला: मेरे मामले में, समस्या एनम की वजह से थी,

मैंने इसका उपयोग करके हल किया

    [DataContract]
    [Flags]
    public enum Fruits
    {
        [EnumMember]
        APPLE = 1,
        [EnumMember]
        BALL = 2,
        [EnumMember]
        ORANGE = 3 

    }

मुझे अपने Enums को DataContract, Flags और EnumMember विशेषताओं के साथ Enum के सभी सदस्य के साथ सजाना था।

मैंने इसे देखने के बाद इसे हल किया msdn संदर्भ को देखने के :


1
धन्यवाद। मुझे भी यही करना था।
मैथ्यू कोल

1
धन्यवाद, आपने मुझे समय के ढेर से बचाया
निक्सन

4
बहुत बहुत धन्यवाद .. मेरा समय बहुत बचाया
amesh

इस से संबंधित - यदि आपके पास एक अनुबंध पर एक एनुम प्रकार है जो डेटामेम्बर का प्रकार नहीं है तो आपको यह त्रुटि मिलेगी। मैंने बस एक प्रॉपर्टी जोड़ी जो डेटामेम्बर थी और इसे नॉन-डेटाकंट्रैक्ट एनम टाइप दिया।
पजा

क्या यह भी मामला नहीं है कि एन्यूमरेशन को इंडेक्स 0 से शुरू करने की आवश्यकता है? यह निश्चित रूप से मेरे लिए अतीत में एक मुद्दा था। तो ऊपर दिए गए उदाहरण में APPLE = 0 के बजाय 1.
सीनेटर

17

मेरे पास यही त्रुटि थी और समस्या क्रमबद्धता थी। मैं सर्विस ट्रेस व्यूअर http://msdn.microsoft.com/en-us/library/ms732023.aspx का उपयोग करके वास्तविक समस्या का पता लगाने में कामयाब रहा और इसे आसान हल किया। शायद यह किसी की मदद करेगा।


14

मेरे उदाहरण में, त्रुटि उत्पन्न हुई थी क्योंकि मेरे जटिल प्रकारों में से एक में कोई सेट विधि नहीं थी।

इस तथ्य के कारण धारावाहिक ने एक अपवाद फेंक दिया। आंतरिक सेट विधियों को जोड़ा और यह सब ठीक काम किया।

यह पता लगाने का सबसे अच्छा तरीका है कि ऐसा क्यों हो रहा है (मेरी राय में) ट्रेस लॉगिंग को सक्षम करना है।

मैंने निम्न अनुभाग को अपने साथ जोड़कर इसे प्राप्त किया web.config:

<system.diagnostics>
  <sources>
    <source name="System.ServiceModel.MessageLogging" switchValue="Warning,ActivityTracing">
      <listeners>
        <add name="traceListener"
              type="System.Diagnostics.XmlWriterTraceListener"
              initializeData= "c:\log\Traces.svclog" />
        <add type="System.Diagnostics.DefaultTraceListener" name="Default" />
      </listeners>
    </source>
    <source propagateActivity="true" name="System.ServiceModel" switchValue="Verbose,ActivityTracing">
      <listeners>
        <add name="traceListener"
              type="System.Diagnostics.XmlWriterTraceListener"
              initializeData= "c:\log\Traces.svclog" />
        <add type="System.Diagnostics.DefaultTraceListener" name="Default" />
      </listeners>
    </source>
  </sources>
  <trace autoflush="true" />
</system.diagnostics>

एक बार सेट होने के बाद, मैंने अपने क्लाइंट को चलाया, अपवाद मिला और 'Traces.svclog' फ़ाइल की जाँच की। वहां से, मुझे केवल अपवाद को खोजने की जरूरत थी।


autoflush = true कुंजी थी
जेरेमी स्मिथ

9

DataContract के साथ समाधान, Enums के लिए झंडे थोड़ा बदसूरत दिखते हैं। मेरे मामले में enum में "NotSet = 0" जैसे कुछ जोड़कर समस्या का हल किया गया:

public enum Fruits
{
  UNKNOWN = 0,
  APPLE = 1,
  BALL = 2,
  ORANGE = 3 
}

आह, क्षमा करें, बस एक और जवाब पर टिप्पणी की। मैंने यह व्यवहार भी देखा है।
सीनेटर

स्पष्टीकरण: मैं एक ही समस्या थी। @ रिकिन के उत्तर ने मुझे इस ओर ले जाया: " इनर एक्सिडेसप्शन मैसेज ' एनम वैल्यू' 0 'टाइप के लिए अमान्य है ..." से [ social.msdn.microsoft.com/Forums/vstudio/en-US/… मुझे जेम मिला: "यहां समस्या यह है कि आप ..Response को आरंभ नहीं कर रहे हैं और यह '0' के डिफ़ॉल्ट (और अमान्य) मान को ले रहा है ... इसलिए इसे क्रमबद्ध नहीं किया जा सकता है"।
एजे ए जे

3

मैं उसी मुद्दे का सामना कर रहा था और नीचे दिए गए कोड के साथ हल किया गया था। (यदि कोई टीएलएस कनेक्टिविटी समस्या है)

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

क्लाइंट चैनल खोलने से पहले कृपया इस लाइन को पेस्ट करें।


1

मैने समस्या के बारे में पता लगाया। यह समाप्त हो गया है मेरी विन्यास फाइल के लिए एक रास्ता गलत था। डब्ल्यूसीएफ के लिए त्रुटियां कभी-कभी इतनी मददगार होती हैं।


1

इसे ठीक करने के लिए, हमें AppPool पहचान को एक व्यवस्थापक खाते में बदलना पड़ा ।


यह मेरे लिए उपयोगी था। मैंने ठीक वैसा नहीं किया, जैसा सर्जन ने सुझाया था, लेकिन एप्लिकेशन पूल पहचान (मैं wwwroot ... के तहत) पर केवल पढ़ने / लिखने के अधिकार दिए थे, जो मैं उपयोग कर रहा था।
फ्रांसेस्को बी

1

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


1

कॉन्ट्रैक्ट मिसमैच की वजह से यह त्रुटि हो सकती है। नीचे दिए गए तीन स्तरित आवेदन पर विचार करें ...

यूआई परत
|
प्रक्रिया परत
|
डेटा एक्सेस लेयर
-> प्रोसेस और यूआई लेयर के बीच कॉन्ट्रैक्ट में गुम (ऑनहोल्ड = 3) के साथ एक ही एनम है। Enum: Start = 1, Stop = 2. -> डेटा एक्सेस और प्रोसेस लेयर के बीच अनुबंध में Enum है Enum: Start = 1, Stop = 2, Onhold = 3।

इस मामले में हम प्रक्रिया परत प्रतिक्रिया में समान त्रुटि प्राप्त करेंगे।

एक ही त्रुटि अन्य अनुबंधित बेमेल एप्लीकेशन में मल्टीलेयर्ड एप्लीकेशन में आती है।


आपका उत्तर प्रश्न के साथ कुछ भी करने के लिए प्रकट नहीं होता है। यह भी ध्यान दें कि ओपी ने पहले ही अपनी समस्या हल कर ली है - कॉन्फ़िगरेशन फ़ाइल का पथ गलत था
साइमन मोकेन्जी

1

मुझे यह समस्या थी क्योंकि मैंने एक System.Data.DataTable को वापस करने के लिए अपनी WCF सेवा को कॉन्फ़िगर किया था।

यह मेरे परीक्षण HTML पेज में ठीक काम करता है, लेकिन जब मैंने इसे अपने विंडोज फॉर्म एप्लीकेशन में डाला तो यह विस्फोट हो गया।

मुझे डेटाटेबल से डेटासेट में सेवा के संविदात्मक अनुबंध हस्ताक्षर को बदलना और उसके अनुसार डेटा वापस करना था।

यदि आपको यह समस्या है, तो आप अपनी सेवा में एक अतिरिक्त ऑपरेशनल कॉन्ट्रैक्ट जोड़ना चाहते हैं, ताकि आपको उस कोड को तोड़ने की चिंता न करनी पड़े जो मौजूदा सेवाओं पर निर्भर है।


1

यह कई कारणों से हो सकता है; नीचे उन में से कुछ हैं:

  1. यदि आप कॉम्प्लेक्स डेटा कॉन्ट्रैक्ट ऑब्जेक्ट्स का उपयोग कर रहे हैं (अर्थात अधिक बच्चे कस्टम ऑब्जेक्ट्स के साथ कस्टम ऑब्जेक्ट), तो सुनिश्चित करें कि आपके पास DataContract और DataMember विशेषताओं के साथ सभी कस्टम ऑब्जेक्ट्स सजे हैं
  2. यदि आपके डेटा कॉन्ट्रैक्ट ऑब्जेक्ट्स इनहेरिटेंस का उपयोग करते हैं, तो सुनिश्चित करें कि सभी बेस क्लासेज में DataContract और DataMember विशेषताएँ हैं। इसके अलावा, आपको बेस क्लासेस को [KnownType (typeof (BaseClassType))] विशेषता ( इस पर अधिक जानकारी यहां देखें ) के साथ व्युत्पन्न वर्गों को निर्दिष्ट करने की आवश्यकता है ।

  3. सुनिश्चित करें कि आपके सभी डेटा कॉन्ट्रैक्ट ऑब्जेक्ट प्रॉपर्टीज को दोनों मिलें और सेट करें।


1

मेरी समस्या बहुत अधिक थी ग्राहक और सर्वर के बीच आइटम पारित किए जा रहे थे। मुझे दोनों तरफ के व्यवहार में इस सेटिंग्स को बदलना पड़ा।

<dataContractSerializer maxItemsInObjectGraph="2147483646"/>

मैंने उसी उपाय का इस्तेमाल किया। लेकिन मुझे सेवा ट्रेस व्यूअर का उपयोग करना था जैसा कि @ 100r द्वारा सुझाव दिया गया था कि यह देखने के लिए कि यह त्रुटि थी।
ब्योर्न

1

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

नीचे दिए गए पोस्ट (और समाधान) की जांच करें

https://stackoverflow.com/a/5310951/74138


1

मुझे लगता है कि इसे हल करने का सबसे अच्छा तरीका त्रुटि सलाह का पालन करना है, इसलिए सर्वर लॉग की तलाश है। लॉग को सक्षम करने के लिए मैंने जोड़ा

 <system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
        <listeners>
          <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\logs\TracesServ_ce.svclog" />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>

फिर आप c: \ log \ TracesServ_ce.svclog पर जाएं इसे Microsoft सेवा ट्रेस दर्शक के साथ खोलें। और देखें कि वास्तव में समस्या क्या है।


1

इस मुद्दे पर अधिक जानकारी के लिए, यह भी देखें: दूरस्थ होस्ट - WCF द्वारा एक मौजूदा कनेक्शन को जबरन बंद कर दिया गया था

मेरी समस्या समाप्त हो गई है कि मेरे डेटा ट्रांसफर ऑब्जेक्ट बहुत जटिल थे। शुरुआत गुणों की तरह करें public long Id { get; set; }और एक बार जब आप प्राप्त करें कि जरूरत से ज्यादा अतिरिक्त सामान जोड़ना शुरू कर दें।


1

मैंने कुछ दिनों तक इसके साथ संघर्ष किया और इस पोस्ट और कई अन्य लोगों से हर उत्तर की कोशिश की और अपना समाधान साझा किया क्योंकि लक्षण एक ही थे लेकिन समस्या अलग थी।

समस्या यह थी कि ऐप पूल को एक मेमोरी सीमा के साथ कॉन्फ़िगर किया गया था और यह केवल समय की चर अवधि के बाद पुनर्नवीनीकरण हो जाता है।

आशा है कि यह किसी और की मदद करता है!
अभिवादन,


1

मेरी समस्या यह थी, कि मेरी सेवा का रिटर्न प्रकार स्ट्रिंग था। लेकिन मैंने टाइप xml की स्ट्रिंग लौटा दी:

<reponse><state>1</state><message>Operation was successfull</message</response>

इसलिए त्रुटि डाली गई।


1

मेरे मामले में

मेरी सेवा के लिए कार्य किया है download Files

और यह त्रुटि केवल डाउनलोड करने के प्रयास में दिखाई दी Big Files

इसलिए मुझे यह उत्तरmaxRequestLength आवश्यक मूल्य में वृद्धि के लिए मिलाweb.config

मुझे पता है कि यह अजीब है, लेकिन समस्या हल हो गई है

यदि आप कोई अपलोड या डाउनलोड ऑपरेशन नहीं करते हैं तो शायद यह जवाब आपकी मदद नहीं करेगा


1

मेरे लिए इस त्रुटि के समाधान बहुत अजीब हैं। यह EndpointAddress के पोर्ट एड्रेस का मुद्दा था । आपकी फ़ाइल के दृश्य स्टूडियो पोर्ट पता (जैसे Service1.svc) और आपके wcf प्रोजेक्ट का पोर्ट पता वही होना चाहिए जो आप EndpointAddress में देते हैं । मैं आपको इस समाधान के बारे में विस्तार से बताता हूं।

पोर्ट पते की जांच करने के लिए दो चरण हैं।

  1. अपने WCF प्रोजेक्ट में अपनी सेवा फ़ाइल पर राइट-क्लिक करें (जैसे Service1.svc) -> ब्राउज़र में अब अपने ब्राउज़र में चुनें देखें की तुलना में आपके पास http: // localhost: 61122 / Service1.svc जैसा URL है, इसलिए अब अपने पोर्ट पते को नोट करें एक 61122

  2. Righ अपने wcf प्रोजेक्ट पर क्लिक करें - चुनिंदा गुणों की तुलना में -> वेब टैब पर जाएं -> अब सर्वर सेक्शन में -> विजुअल स्टूडियो डेवलपमेंट सर्वर का उपयोग करें चुनें -> विशिष्ट पोर्ट का चयन करें और वह पोर्ट एड्रेस दें जो हमें पहले हमारी सेवा 1 से मिला है। svc सेवा। वह (61122) है

पहले मेरा अलग-अलग पोर्ट एड्रेस है। पोर्ट एड्रेस को ठीक से निर्दिष्ट करने के बाद जो मैंने एंडपॉइंट एग्ड्रेस में दिया है , मेरी समस्या हल हो गई।

मुझे उम्मीद है कि यह आपकी समस्या हल हो सकती है।


0

यह भी मुद्दा था और यह DataContract और DataMember विशेषताओं के साथ मेरे मॉडल को सजाने के लिए भूल जाने के कारण था


0

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

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