2010-10-01 7 views
6

हमारी टीमविंडोज डब्लूसीएफ क्लाइंट इंटरनेट प्रॉक्सी सर्वर त्रुटि दिखा रहा है सर्वर ने प्रोटोकॉल उल्लंघन किया है। धारा = ResponseStatusLine

का उपयोग कर इंटरनेट प्रॉक्सी सर्वर अपवाद दिखा एक WCF सेवा को कॉल करने के लिए एक विंडोज़ अनुप्रयोग (ग #) बनाने का प्रयास कर "सर्वर को उस प्रोटोकॉल उल्लंघन है। धारा = ResponseStatusLine प्रतिबद्ध" जबकि WCF सेवा

बुला

:

सुझाव इस समस्या को हल करने के लिए/किसी अन्य वैकल्पिक समाधान

//Code for creating proxy 
public static DevicesServiceClient CreateProxy() 
{ 
    var proxy = new DevicesServiceClient("BasicHttpBinding_IDevicesService"); 

    BasicHttpBinding binding = new BasicHttpBinding(); 
    binding.Security.Mode = BasicHttpSecurityMode.None; 
    binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None; 
    binding.UseDefaultWebProxy = false; 
    binding.ProxyAddress = new Uri(string.Format("http://{0}:{1}", "192.168.0.20","808")); 
    proxy.Endpoint.Binding = binding; 

    proxy.ClientCredentials.UserName.UserName = "Username"; 
    proxy.ClientCredentials.UserName.Password = "Password"; 
} 

सर्वर स्टैक ट्रेस दे

System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException (WebException WebException, HttpWebRequest अनुरोध, HttpAbortReason abortReason)
ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply पर (TimeSpan का समय समाप्त)
System.ServiceModel.Channels.RequestChannel पर पर .Request (संदेश संदेश, TimeSpan का समय समाप्त)
System.ServiceModel.Dispatcher.RequestChannelBinder.Request (संदेश संदेश, TimeSpan का समय समाप्त)
System.ServiceModel.Channels.ServiceChannel.Call पर (स्ट्रिंग कार्रवाई, बूलियन oneway पर, ProxyOperationRuntime आपरेशन , ऑब्जेक्ट [] इन्स, ऑब्जेक्ट [] आउट, टाइमस्पेन टाइमआउट)
System.ServiceModel.Channels.ServiceChannel.Call पर (स्ट्रिंग कार्रवाई, बूलियन oneway, ProxyOperationRuntime आपरेशन, [] इन की वस्तु, वस्तु [] बहिष्कार) System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage methodCall, ProxyOperationRuntime पर
आपरेशन)
System.ServiceModel.Channels.ServiceChannelProxy.Invoke पर (iMessage संदेश) पर

अपवाद rethrown [0]:
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (iMessage reqMsg, iMessage retMsg पर) सिस्टम पर
.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData & msgData, Int32 प्रकार)
DevicesService.IDevicesService.CheckNetworkConnection पर (स्ट्रिंग IPADDRESS) app.config में

मेरे क्लाइंट पक्ष कोड alt text

web.config में मेरे सर्वर साइड कोड alt text

उत्तर

2

कोड प्रॉक्सी सर्वर

  { 
       var proxy = new DevicesServiceClient("BasicHttpBinding_IDevicesService"); 
       BasicHttpBinding binding = new             BasicHttpBinding("BasicHttpBinding_IDevicesService"); 
       var proxySettings = ApplicationDetails.CheckProxySettings(); 

       Uri domainAddress; 
       var strtemp = new string[] { }; 
       //WebProxy webproxy = new WebProxy(); 
       var networkCredentials = new NetworkCredential(); 
       if (proxySettings.ProxyServerType == "http") 
       { 
        domainAddress = new Uri(string.Format("http://{0}:{1}", proxySettings.ProxyServerAddress, proxySettings.ProxyServerPort)); 
       } 
       else if (proxySettings.ProxyServerType == "https") 
       { 
        domainAddress = new Uri(string.Format("https://{0}:{1}", proxySettings.ProxyServerAddress, proxySettings.ProxyServerPort)); 
       } 
       else 
       { 
        domainAddress = new Uri(string.Format("http://{0}:{1}", proxySettings.ProxyServerAddress, proxySettings.ProxyServerPort)); 
       } 
       // 
       WebProxy webproxy = new WebProxy(domainAddress.ToString(), true, strtemp); 
       // 

       //networkCredentials.Domain = domainAddress.ToString(); 
       if (proxySettings.ProxyAuthentication == "1") 
       { 
        networkCredentials.UserName = proxySettings.Username; 
        networkCredentials.Password = proxySettings.Password; 
       } 
       webproxy.Credentials = networkCredentials; 
       webproxy.BypassProxyOnLocal = false; 
       WebRequest.DefaultWebProxy = webproxy; 
       binding.UseDefaultWebProxy = true; 
       proxy.Endpoint.Binding = binding; 

      } 
2

मैंने पहले इस अपवाद को नहीं देखा है लेकिन मुझे प्रॉक्सी काम करने के लिए पहले से ही बड़ी समस्याएं थीं। मुझे नहीं पता कि क्यों प्रॉक्सी पता सेट करना और BasicHttp बाइंडिंग में गलत करने के लिए डिफ़ॉल्ट प्रॉक्सी का उपयोग करना मेरे लिए कभी काम नहीं किया। मुझे हमेशा डिफ़ॉल्ट वेब प्रॉक्सी का उपयोग करना था और वहां यूआरएल सेट करना था या पूरी तरह से नया कस्टम बाइंडिंग बनाना और http ट्रांसपोर्ट बाध्यकारी तत्व में प्रॉक्सी यूआरएल सेट करना था।

+0

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

2

अपने प्रॉक्सी सर्वर द्वारा दिए गए शीर्षलेखों की जांच करने का प्रयास करें। ऐसा लगता है कि विकृत/गैर मानक शीर्षलेख इस अपवाद का कारण बनते हैं।

http://www.velocityreviews.com/forums/t302174-why-do-i-get-the-server-committed-a-protocol-violation.html

2

ऐसा लगता है कि यह एक कैच-ऑल अपवाद के बारे में कुछ है और एक परिणाम के रूप उपयोगिता सीमित है।गलत पोर्ट को मारने वाले खराब हेडर, जो एक अलग स्वरूपित प्रतिक्रिया देता है), और प्रतिक्रिया में सामग्री-लंबाई अपवाद के लिए सभी कारण हो सकती है। यदि यह एक हेडर समस्या है, तो आप क्लाइंट को असुरक्षित शीर्षलेखों को अनदेखा करने के लिए कह सकते हैं (यदि यह एक विश्वसनीय स्रोत है)।

<configuration> 
    <system.net> 
     <settings> 
      <httpWebRequest useUnsafeHeaderParsing="true" /> 
     </settings> 
    </system.net> 
</configuration> 
+0

app.config – amexn

+0

में जोड़ने के बाद एक ही त्रुटि दिखा रहा है, फिर हेडर समस्या नहीं है। मेरा अगला संदिग्ध सामग्री की लंबाई होगी। MaxXXXMessageSize (XXX = प्राप्त या प्रेषित) के लिए सर्वर और क्लाइंट दोनों पर बाध्यकारी कॉन्फ़िगरेशन जांचें और उन्हें टक्कर दें। –

+0

अब क्लाइंट साइड ऐप.कॉन्फिग और सर्वर साइड web.config कोड – amexn

1

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

2

एक समय में इस चरण का निदान करने का प्रयास करें। जोड़ने के लिए

  1. बदलें servicebehavior <serviceMetadata httpGetEnabled = "true"/> फिर IE में प्रॉक्सी सेटिंग बदल सकते हैं और सेवा यूआरएल को ब्राउज़ करें और देखें कि वह आपके डबल्यूएसडीएल पेज प्राप्त कर सकते हैं।
  2. उपरोक्त SoapUI के साथ करें और देखें कि क्या कोई त्रुटि है या नहीं। यदि डब्ल्यूएसडीएल उपलब्ध है प्रॉक्सी उत्पन्न करें और त्रुटियों की जांच के लिए ऑपरेशन को कॉल करें।
  3. वर्णित here के रूप में डब्ल्यूसीएफ ट्रेसिंग सक्षम करें। Tracelogs बहुत विस्तृत हैं और मैंने इस तकनीक का उपयोग कर कई डब्ल्यूसीएफ मुद्दों का निदान किया है।
  4. अंत में WireShark का उपयोग कर नेटवर्क ट्रेसिंग का प्रयास करें।
संबंधित मुद्दे