এই একই পরিস্থিতি এবং ত্রুটিটি কোনও System.ServiceModel
রান-টাইমে যখন একটি ডিফল্ট উইজার্ড উত্পন্ন এসওএপি ওয়েব পরিষেবা প্রক্সি (100% নয় যদি ডাব্লুসিএফ স্ট্যাকের ক্ষেত্রেও এটি হয় ) থেকে উদ্ভূত হতে পারে :
- HTTP 1.1 বোঝে না এমন একটি প্রক্সি ব্যবহার করতে শেষ ব্যবহারকারী মেশিনটি কনফিগার করা হয়েছে (ইন্টারনেট সেটিংসে)
- ক্লায়েন্ট এমন কিছু প্রেরণ শেষ করে যা HTTP 1.0 প্রক্সি বুঝতে পারে না (সাধারণত কোনও
Expect
HTTP এর অংশ হিসাবে একটি শিরোনাম POST
বা PUT
অনুরোধটি এখানে দুটি অংশে প্রেরণ করার প্রমিত প্রোটোকল কনভেনশনের কারণে অনুরোধ হিসাবে এখানে মন্তব্যগুলিতে অন্তর্ভুক্ত থাকে )
... একটি ফলন 417।
অন্যান্য উত্তরের হিসাবে আচ্ছাদিত, আপনি যে নির্দিষ্ট সমস্যাটি চালাচ্ছেন তা যদি Expect
শিরোনামটি সমস্যা সৃষ্টি করে, তবে সেই নির্দিষ্ট সমস্যাটিকে দ্বি-অংশের পুট / পোস্ট পোস্টের মাধ্যমে অপেক্ষাকৃত গ্লোবাল স্যুইচিং অফ করে চালানো যেতে পারে System.Net.ServicePointManager.Expect100Continue
।
তবে এটি সম্পূর্ণ অন্তর্নিহিত সমস্যাটি সমাধান করে না - স্ট্যাকটি এখনও HTTP 1.1 নির্দিষ্ট জিনিস যেমন কীপলাইভস ইত্যাদি ব্যবহার করতে পারে (যদিও অন্যান্য ক্ষেত্রে অন্যান্য উত্তরগুলি মূল ক্ষেত্রে অন্তর্ভুক্ত করে))
আসল সমস্যাটি হ'ল অটোজেনেটেড কোডটি ধরে নিয়েছে যে এইচটিটিপি 1.1 সুবিধাগুলি সবাই বুঝতে পারে সেভাবে অন্ধভাবে ব্যবহার করা ঠিক হবে। নির্দিষ্ট ওয়েব সার্ভিস প্রক্সিটির জন্য এই ধারণাটি বন্ধ করতে, কোনও এই ডাইরেক্টড প্রক্সি ক্লাস তৈরি HttpWebRequest.ProtocolVersion
করে ডিফল্টের ডিফল্ট থেকে 1.1 ডিফল্টকে ওভাররাইড পরিবর্তন করতে পারে যা এই পোস্টে প্রদর্শিত হিসাবে ওভাররাইড করে :protected override WebRequest GetWebRequest(Uri uri)
public class MyNotAssumingHttp11ProxiesAndServersProxy : MyWS
{
protected override WebRequest GetWebRequest(Uri uri)
{
HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(uri);
request.ProtocolVersion = HttpVersion.Version10;
return request;
}
}
( MyWS
ওয়েব রেফারেন্স যুক্ত উইজার্ডটি আপনাকে দেখানোর প্রক্সিটি কোথায় রয়েছে))
আপডেট: উত্পাদনে আমি ব্যবহার করছি এমন একটি ইমেল:
class ProxyFriendlyXXXWs : BasicHttpBinding_IXXX
{
public ProxyFriendlyXXXWs( Uri destination )
{
Url = destination.ToString();
this.IfProxiedUrlAddProxyOverriddenWithDefaultCredentials();
}
// Make it squirm through proxies that don't understand (or are misconfigured) to only understand HTTP 1.0 without yielding HTTP 417s
protected override WebRequest GetWebRequest( Uri uri )
{
var request = (HttpWebRequest)base.GetWebRequest( uri );
request.ProtocolVersion = HttpVersion.Version10;
return request;
}
}
static class SoapHttpClientProtocolRealWorldProxyTraversalExtensions
{
// OOTB, .NET 1-4 do not submit credentials to proxies.
// This avoids having to document how to 'just override a setting on your default proxy in your app.config' (or machine.config!)
public static void IfProxiedUrlAddProxyOverriddenWithDefaultCredentials( this SoapHttpClientProtocol that )
{
Uri destination = new Uri( that.Url );
Uri proxiedAddress = WebRequest.DefaultWebProxy.GetProxy( destination );
if ( !destination.Equals( proxiedAddress ) )
that.Proxy = new WebProxy( proxiedAddress ) { UseDefaultCredentials = true };
}
}