2010-11-25 9 views
6

के साथ परेशानी होने के कारण मुझे डब्ल्यूसीएफ सेवा से एक डब्ल्यूपीएफ क्लाइंट को एक तरफा कॉलबैक के आमंत्रण पर इस परेशानी की त्रुटि मिल रही है।डब्ल्यूसीएफ: एक तरफा कॉलबैक

संदेश 00:01:00 की आवंटित समय समाप्ति के भीतर स्थानांतरित नहीं किया जा सकता है। विश्वसनीय चैनल के स्थानांतरण विंडो में कोई स्थान उपलब्ध नहीं था। इस ऑपरेशन को आवंटित समय लंबा टाइमआउट का हिस्सा हो सकता है।

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

मेरे सर्वर निम्नलिखित config है:

<xml version="1.0"?> 
<configuration> 

    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 
    <system.serviceModel> 
    <services> 
     <service name="RawDealService.GameService"> 
     <endpoint address ="" binding="wsDualHttpBinding" bindingConfiguration="basicConfig" contract="MyService.IGameService"> 
      <identity> 
      <dns value="localhost"/> 
      </identity> 
     </endpoint> 
     </service> 
    </services> 
    <bindings> 
     <wsDualHttpBinding> 
     <binding name="basicConfig" messageEncoding="Text"> 
      <security mode="None"/> 
     </binding> 
     </wsDualHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 

</configuration> 

और मेरे मुवक्किल निम्नलिखित config है:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.serviceModel> 
     <bindings> 
      <wsDualHttpBinding> 
       <binding name="WSDualHttpBinding_IGameService" closeTimeout="00:01:00" 
        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
        bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
        messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        <reliableSession ordered="true" inactivityTimeout="00:10:00" /> 
        <security mode="None"> 
         <message clientCredentialType="Windows" negotiateServiceCredential="true" /> 
        </security> 
       </binding> 
      </wsDualHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="http://localhost:44259/GameService.svc" binding="wsDualHttpBinding" 
       bindingConfiguration="WSDualHttpBinding_IGameService" contract="IGameService" 
       name="WSDualHttpBinding_IGameService"> 
       <identity> 
        <dns value="localhost" /> 
       </identity> 
      </endpoint> 
     </client> 
    </system.serviceModel> 

    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" /> 
    </startup> 
</configuration> 

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

+0

क्या आप अपनी सर्विस इंटरफेस क्लास (कॉलबैक इंटरफ़ेस) भी पोस्ट कर सकते हैं – Rev

+0

@Rev नीचे देखें। मुझे समस्या मिली लेकिन कल तक मेरा जवाब स्वीकार नहीं कर सकता। फिर भी धन्यवाद! – Ben

+0

आपका स्वागत है :) – Rev

उत्तर

6

मुझे यह समस्या मिली, और यह दुर्भाग्यपूर्ण है कि इस विशेष त्रुटि संदेश ने मुझे एक पूरी तरह से गलत रास्ता भेजा है।

मेरा डेटा कंट्रैक्ट सेटअप में कुछ कक्षाएं विरासत के साथ थीं, और मैंने KnownType एस के लिए उचित रूप से चिह्नित नहीं किया था।

मेरा अनुमान किसी बिंदु पर क्लाइंट ने किसी संबंधित ऑब्जेक्ट को डी-सीरियलाइज़ करने की कोशिश की और असफल रहा। त्रुटि को फ्रेमवर्क द्वारा गहन रूप से संभाला नहीं जाना चाहिए था, और शायद यह बार-बार भेजने की कोशिश करता रहा, और एक मिनट के बाद कोई प्रतिक्रिया नहीं मिली।

शायद अगर मेरे पास दो-तरफा कॉल था तो मुझे एक अधिक जानकारीपूर्ण स्टैक ट्रेस मिल गया होता।

+0

धन्यवाद! मुझे भी :( –

3

यह नेटवर्किंग मुद्दे की बजाय अवरुद्ध/थ्रेडिंग समस्या की तरह गंध करता है।

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

यदि ऐसा है, तो आपको या तो अपने क्लाइंट पर UseSynchronizationContext=false सेट करना होगा, या संदेश प्राप्त होने के इंतजार के दौरान अवरुद्ध होने से बचने की आवश्यकता होगी।

उस ने कहा, मेरे पास WsDualHttp बाइंडिंग के साथ अनुभव का एक टन नहीं है।

+0

एक अच्छा विचार। मैंने पहले से ही इस परियोजना के साथ थ्रेडिंग मुद्दों के अपने उचित हिस्से में भाग लिया है। दुर्भाग्यवश, यह समस्या उनमें से एक प्रतीत नहीं होती है (नीचे मेरा उत्तर देखें)। – Ben

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