এইচটিটিপিসিলেট ব্যবহার করে এইচটিপিএস কল করুন call


157

আমি HttpClientসি # ব্যবহার করে ওয়েবএপি কল করার জন্য ব্যবহার করছি। তুলনায় ঝরঝরে ও দ্রুত উপায় বলে মনে হচ্ছে WebClient। তবে আমি Httpsকল করতে গিয়ে আটকে আছি ।

Httpsকল করার জন্য আমি কীভাবে নীচের কোডটি করতে পারি ?

HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("https://foobar.com/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/xml"));

var task = httpClient.PostAsXmlAsync<DeviceRequest>(
                "api/SaveData", request);

সম্পাদনা 1: উপরের কোডটি http কল করার জন্য সূক্ষ্মভাবে কাজ করে। তবে আমি যখন স্কিমটি https এ পরিবর্তন করি তখন এটি কার্যকর হয় না। এখানে প্রাপ্ত ত্রুটি এখানে:

অন্তর্নিহিত সংযোগটি বন্ধ ছিল: এসএসএল / টিএলএস সুরক্ষিত চ্যানেলের জন্য বিশ্বাসের সম্পর্ক স্থাপন করতে পারেনি।

সম্পাদনা 2: স্কিমটি https এ পরিবর্তন করা হচ্ছে: প্রথম ধাপ।

আমি কীভাবে সি # অনুরোধের সাথে শংসাপত্র এবং পাবলিক / প্রাইভেট কী সরবরাহ করব।


2
আপনি কেবল নির্দিষ্ট করে https কল করছেনnew Uri("https://foobar.com/");
felickz

2
আমি বিভ্রান্ত এটি ইতিমধ্যে কাজ করে না? আপনি যদি কোনো ত্রুটি পাচ্ছেন? (সম্পাদনা করুন: ওপি https থেকে HTTP তে ইউআরআই পরিবর্তন করার আগে পোস্ট করা হয়েছিল)
টিম

উত্তর:


215

যদি সার্ভার কেবলমাত্র টিএলএস ১.২ এর মতো উচ্চতর টিএলএস সংস্করণটিকে সমর্থন করে তবে এটি ব্যর্থ হবে যদি না আপনার ক্লায়েন্ট পিসি ডিফল্টরূপে উচ্চতর টিএলএস সংস্করণ ব্যবহারের জন্য কনফিগার করা থাকে। এই সমস্যাটি কাটিয়ে উঠতে আপনার কোডগুলিতে নিম্নলিখিতগুলি যুক্ত করুন।

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

আপনার উদাহরণ কোডটি সংশোধন করা, এটি হবে

HttpClient httpClient = new HttpClient();   

//specify to use TLS 1.2 as default connection
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

httpClient.BaseAddress = new Uri("https://foobar.com/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));

var task = httpClient.PostAsXmlAsync<DeviceRequest>("api/SaveData", request);

@ ডেরিকস আমি খুশি এবং আপনাকে স্বাগতম। যদি কোনও কারণে, আপনি উত্পাদন সেটিংয়ে কোডটি পরিবর্তন করতে পারবেন না তবে সার্ভারে কিছু অ্যাডমিন করতে সক্ষম হন, আমি এই ইউটিলিটিটি টিএলএস 1.2 কে ডিফল্ট হিসাবে কনফিগার করতে ব্যবহার করি। nartac.com/Products/IISCrypto
রোনাল্ড রামোস

SecurityProtocolType.Tls12আপনি উল্লেখ করেছেন এমন
এনাম

1
@ জোবাডিনিজ .NET 4.5 বা ততোধিক ব্যবহার করে এবং সিস্টেম. নেট নেটস্পেস অন্তর্ভুক্ত করে।
রোনাল্ড রামোস

সিকিউরিটিপ্রোটোকল সেট করা কি কেবল একবারই হওয়া দরকার? অ্যাপ্লিকেশন শুরুতে পছন্দ?
ক্যামহার্ট

এটি দুর্দান্ত কাজ করে। ধন্যবাদ। আমি আরও জানতে পেরেছি যে এই HttpClient ক্লায়েন্ট = নতুন HttpClient () ব্যবহার করে আমার কোনও শিরোনাম পরিষ্কার করার দরকার নেই; সার্ভিসপয়েন্ট ম্যানেজ.সিকিউরিটিপ্রোটোকল = সিকিউরিটিপ্রোটোকল টাইপ.টিএস 12 | সিকিউরিটিপ্রোটোকলটাইপ। Tls11 | SecurityProtocolType.Tls; HttpResponseMessage প্রতিক্রিয়া = ক্লায়েন্টের জন্য অপেক্ষা করুন etGetAsync ("https: // ...");
এটলিস্ট থেরসস্টোস্ট

127

কেবল ইউআরআইতে এইচটিটিপিএস নির্দিষ্ট করুন।

new Uri("https://foobar.com/");

Foobar.com এর একটি বিশ্বস্ত এসএসএল সার্ট থাকা দরকার বা আপনার কলগুলি অবিশ্বস্ত ত্রুটি সহ ব্যর্থ হবে।

সম্পাদনা উত্তর: ক্লায়েন্টচটিটি এইচটিপিপ্লায়েন্টের সাহায্যে দেয়

WebRequestHandler handler = new WebRequestHandler();
X509Certificate2 certificate = GetMyX509Certificate();
handler.ClientCertificates.Add(certificate);
HttpClient client = new HttpClient(handler);

সম্পাদনা উত্তর 2: আপনি যে সার্ভারে সংযোগ করছেন সেটি যদি SSL, TLS 1.0, এবং 1.1 অক্ষম করে থাকে এবং আপনি এখনও। নেট ফ্রেমওয়ার্ক 4.5 (বা নীচে) চালিয়ে যাচ্ছেন আপনার একটি পছন্দ করা দরকার

  1. নেট 4.6+ এ আপগ্রেড করুন ( ডিফল্টরূপে টিএলএস 1.2 সমর্থন করে )
  2. TLS1.2 এর সাথে সংযোগ স্থাপনের জন্য 4.5 নির্দেশ দেওয়ার জন্য রেজিস্ট্রি পরিবর্তন যুক্ত করুন (দেখুন: কমপ্যাটের জন্য বিক্রয়দ্বার রাইটআপ এবং পরিবর্তনের কীগুলি বা চেকআউট আইআইএসক্রিপ রোনাল্ড রামোসের উত্তর মন্তব্য দেখুন )
  3. TLS1.2 এর সাথে সংযোগ স্থাপনের জন্য .NET ম্যানুয়ালি কনফিগার করতে অ্যাপ্লিকেশন কোড যুক্ত করুন (রোনাল্ড রামোসের উত্তর দেখুন )

@ ফেলিকজ দুর্দান্ত সাড়া উইন্ডোজ ফোন 8 এর জন্য কি ওয়েবরেকুয়েস্টহ্যান্ডলার লাইব্রেরির সমান?
বিলট্রন

@ বিল্ট্রন ডাব্লুপি / উইন 8 এর জন্য বিভিন্ন লাইব্রেরি .. দেখুন
ফেব্রুয়ারী 18:01 এ ফেলিক্জ

6
স্ব স্বাক্ষরিত শংসাপত্রগুলির বিকাশ বা পরিচালনা করার সময় আপনি নিম্নলিখিতগুলি সহ অবিশ্বস্ত শংসাপত্রের ত্রুটিগুলি উপেক্ষা করতে পারেন: ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
বিকাশকারী

6
কী GetMyX509Certificate?
ফান্দি সুসান্টো

6
@ বিকাশকারীরা কেবল আশা করতে পারে যে কোডটি আপনার প্রোডাকশন বিল্ডে
নেমে যায়

15

আপনার কোডটি এইভাবে সংশোধন করা উচিত:

httpClient.BaseAddress = new Uri("https://foobar.com/");

আপনার কেবল https:ইউআরআই স্কিমটি ব্যবহার করতে হবে। সুরক্ষিত HTTP সংযোগগুলি সম্পর্কে এমএসডিএন-তে এখানে একটি দরকারী পৃষ্ঠা রয়েছে । প্রকৃতপক্ষে:

Https: ইউআরআই স্কিম ব্যবহার করুন

এইচটিটিপি প্রোটোকল দুটি ইউআরআই স্কিম সংজ্ঞায়িত করেছে:

HTTP: এনক্রিপ্ট করা সংযোগগুলির জন্য ব্যবহৃত।

https: এনক্রিপ্ট করা উচিত সুরক্ষিত সংযোগগুলির জন্য ব্যবহৃত। এই বিকল্পটি ডিজিটাল শংসাপত্র এবং শংসাপত্র কর্তৃপক্ষও ব্যবহার করে যাচাই করে সার্ভারটি কে এটি বলে দাবি করে।

তদতিরিক্ত, এইচটিটিপিএস সংযোগগুলি একটি এসএসএল শংসাপত্র ব্যবহার করে তা বিবেচনা করুন। আপনার সুরক্ষিত সংযোগের এই শংসাপত্র রয়েছে তা নিশ্চিত করুন অন্যথায় অনুরোধগুলি ব্যর্থ হবে।

সম্পাদনা করুন:

উপরের কোডটি http কল করার জন্য সূক্ষ্মভাবে কাজ করে। তবে যখন আমি এই স্কিমটি https এ পরিবর্তন করি এটি কার্যকর হয় না, আমাকে ত্রুটিটি পোস্ট করতে দিন।

এর অর্থ কী কাজ করে না? অনুরোধ ব্যর্থ? একটি ব্যতিক্রম নিক্ষেপ করা হয়? আপনার প্রশ্ন পরিষ্কার করুন।

যদি অনুরোধগুলি ব্যর্থ হয়, তবে সমস্যাটি SSL শংসাপত্র হওয়া উচিত।

সমস্যা সমাধানের জন্য, আপনি ক্লাস HttpWebRequestএবং তার সম্পত্তিটি ব্যবহার করতে পারেন ClientCertificate। তদতিরিক্ত, শংসাপত্রটি ব্যবহার করে এইচটিটিপিএস অনুরোধ কীভাবে করা যায় সে সম্পর্কে আপনি এখানে একটি দরকারী নমুনা খুঁজে পেতে পারেন ।

উদাহরণটি নিম্নোক্ত (এমএসডিএন পৃষ্ঠায় লিঙ্কিত আগে দেখানো হয়েছে):

//You must change the path to point to your .cer file location. 
X509Certificate Cert = X509Certificate.CreateFromCertFile("C:\\mycert.cer");
// Handle any certificate errors on the certificate from the server.
ServicePointManager.CertificatePolicy = new CertPolicy();
// You must change the URL to point to your Web server.
HttpWebRequest Request = (HttpWebRequest)WebRequest.Create("https://YourServer/sample.asp");
Request.ClientCertificates.Add(Cert);
Request.UserAgent = "Client Cert Sample";
Request.Method = "GET";
HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();

প্রাথমিকভাবে, কৌশল অনুরোধের সাথে শংসাপত্র প্রেরণে মিথ্যা। কিভাবে যে কি?
অভিজিৎ

"সি: \\ mycert.cer" কোথায় পাবেন? কিভাবে mycert.cer ফাইল উত্পন্ন?
মাসিবু

@masiboo আমি যা লিখেছি তা কীভাবে এইচটিটিপিএস কল করতে পারে তার উত্তর দেয়। কীভাবে * .cer ফাইল তৈরি করা যায় সে সম্পর্কে গুগলকে জিজ্ঞাসা করুন এবং আপনি উত্তরটি নিজেরাই খুঁজে পাবেন।
আলবার্তো সোলানো

9

যখন সংযুক্ত httpsহয়েছি তখন আমারও এই ত্রুটিটি পেয়েছে, আমি আগে এই লাইনটি যুক্ত করেছি HttpClient httpClient = new HttpClient();এবং সফলভাবে সংযুক্ত করেছি:

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

আমি এটি উত্তর এবং অন্য অনুরূপ আনসার থেকে জানি এবং মন্তব্যে উল্লেখ করা হয়েছে:

এটি উন্নয়নে কার্যকর একটি হ্যাক তাই এটির চারপাশে একটি # আইডি ডিবিউগ # এন্ডিফ স্টেটমেন্ট স্থাপন করা আপনাকে এই নিরাপদ করতে এবং উত্পাদনের শেষ পর্যন্ত এটি বন্ধ করতে আপনার সবচেয়ে কম কাজ করা উচিত is

এছাড়া, আমি পদ্ধতি চেষ্টা করা হয়নি অন্য উত্তর ব্যবহারের new X509Certificate()বাnew X509Certificate2() একটি শংসাপত্র তৈরি করতে চেষ্টা করি নি, আমি নিশ্চিত তৈরি করব নাnew() কাজ করবে কি না।

সম্পাদনা করুন: কিছু তথ্যসূত্র:

আইআইএস 7-এ একটি স্ব-স্বাক্ষরিত সার্ভার শংসাপত্র তৈরি করুন

আইআইএস 7 এ এসএসএল শংসাপত্রগুলি আমদানি ও রপ্তানি করুন

.Pfx থেকে .cer রূপান্তর করুন

সার্ভারের্টিফিকেটভিডিয়েশনক্যালব্যাক ব্যবহারের জন্য সেরা অনুশীলন

আমি থাম্বপ্রিন্টের মান সমান দেখতে পাই x509certificate.GetCertHashString() :

একটি শংসাপত্রের থাম্বপ্রিন্ট পুনরুদ্ধার করুন


6

গিটহাবের সাথে সংযোগ করার সময় আমার একই সমস্যা ছিল, যার জন্য একজন ব্যবহারকারী এজেন্ট প্রয়োজন। সুতরাং এটি শংসাপত্র তৈরির চেয়ে এটি সরবরাহ করা যথেষ্ট

var client = new HttpClient();

client.BaseAddress = new Uri("https://api.github.com");
client.DefaultRequestHeaders.Add(
    "Authorization",
    "token 123456789307d8c1d138ddb0848ede028ed30567");
client.DefaultRequestHeaders.Accept.Add(
    new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add(
    "User-Agent",
    "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");

2
আপনি যে টোকেনটি ইন্টারনেটের সাথে ভাগ করে নিচ্ছেন তা প্রত্যাহার করা উচিত, আমি মনে করি গিটহাব এটি স্বয়ংক্রিয়ভাবে সম্পন্ন করেছে।
অমিয়াস

21
আপনি কি সত্যিই ভাবেন আমার টোকেনটি দিয়ে শুরু হয় 123456789??
কার্লো ভি। ড্যাঙ্গো

5

এর স্তরে একটি অ-গ্লোবাল সেটিং রয়েছে HttpClientHandler:

var handler = new HttpClientHandler()
{
    SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls
};

var client = new HttpClient(handler);

এইভাবে একটি সর্বশেষ টিএলএস সংস্করণ সক্ষম করে।

দ্রষ্টব্য, ডিফল্ট মানটি SslProtocols.Defaultআসলে SslProtocols.Ssl3 | SslProtocols.Tls(নেট কোর 2.1 এবং নেট ফ্রেমওয়ার্ক 4.7.1 এর জন্য পরীক্ষিত) checked


উত্তর করার জন্য ধন্যবাদ. একটি সামান্য দ্রষ্টব্য: এই ডকুমেন্টেশন অনুসারে: ডকস.মাইক্রোসফটকম / en-us / dotnet / api/… এর জন্য কমপক্ষে ফ্রেমওয়ার্ক 4.7.1 প্রয়োজন।
GELR

@ জেলআর হ্যাঁ, আপনি ঠিক বলেছেন উপরের কোডটি। নেট 4.6.1 এ রান-টাইম ত্রুটি দেয়। উত্তর স্থির।
স্টপ-ক্রান

.NET ফ্রেমওয়ার্কের পূর্ববর্তী সংস্করণগুলিতে, এই সম্পত্তিটি ব্যক্তিগত
জোটাবে

নেট কোর 3.1 এ এটি আমার পক্ষে কাজ করেছে। গ্লোবাল সিস্টেম সেট.নেট.সেসওয়ারপয়েন্ট ম্যানেজ.সিকিউরিটিপ্রোটোকল = এক্সএক্সএক্সএক্স - একটি প্যাকেটের ট্রেসটিতে একেবারে শূন্য প্রভাব ফেলেছিল।
রোয়ান স্মিথ

3

ইউআরআইতে কেবল এইচটিটিপিএস উল্লেখ করার কৌশলটি করা উচিত।

httpClient.BaseAddress = new Uri("https://foobar.com/");

যদি অনুরোধটি এইচটিটিপি নিয়ে কাজ করে তবে এইচটিটিপিএসে ব্যর্থ হয় তবে এটি অবশ্যই একটি শংসাপত্রের সমস্যা । নিশ্চিত করুন যে কলার শংসাপত্র জারিকারীকে বিশ্বাস করে এবং শংসাপত্রটির মেয়াদ শেষ হয়নি। এটি পরীক্ষা করার একটি দ্রুত এবং সহজ উপায় হ'ল ব্রাউজারে ক্যোয়ারী তৈরি করার চেষ্টা করা।

আপনি সার্ভারেও এটি পরীক্ষা করতে চাইতে পারেন (এটি যদি আপনার হয় এবং / অথবা আপনি পারেন তবে) এটি সঠিকভাবে এইচটিটিপিএস অনুরোধগুলি পরিবেশন করতে সেট করা আছে।


: আমার একটি অনুরূপ সমস্যা আছে: আমি ব্রাউজারে ক্যোয়ারী তৈরি করেছি এবং শংসাপত্রটি বৈধ (কলটি পেরিয়ে যায়, পরিষেবা স্তর হিসাবে অনুমোদিত হয় এবং সমস্ত মনোমুগ্ধকর মতো কাজ করে) তবে প্রোগ্রামগতভাবে কাজ করে না। আর কী হতে পারে? আমি যদি ওয়েব অ্যাপ্লিকেশন থেকে ব্রাউজারটিকে প্রোগ্রামালিমে কলিংয়ের চেয়ে "ম্যানুয়ালি পরিষেবাটি কল করা" ব্রাউজার থেকে একই শংসাপত্রটি ব্যবহার করি?
কার্লোস

2

আমি ত্রুটিও পাচ্ছিলাম:

অন্তর্নিহিত সংযোগটি বন্ধ ছিল: এসএসএল / টিএলএস সুরক্ষিত চ্যানেলের জন্য বিশ্বাসের সম্পর্ক স্থাপন করতে পারেনি।

... একটি জ্যামারিন ফর্ম অ্যান্ড্রয়েড- বাজারজাতকরণ অ্যাপ্লিকেশন সহ এমন কোনও এপিআই সরবরাহকারী থেকে টিএলএস 1.3 প্রয়োজনের জন্য সংস্থান অনুরোধ করার চেষ্টা করছে

সমাধানটি ছিল Xamarin "পরিচালিত" (.NET) http ক্লায়েন্ট (যা Xamarin ফর্ম v2.5 হিসাবে টিএলএস 1.3 সমর্থন করে না) পরিবর্তনের জন্য এবং এর পরিবর্তে অ্যান্ড্রয়েড নেটিভ ক্লায়েন্টটি ব্যবহার করার জন্য প্রকল্প কনফিগারেশনটি আপডেট করা।

এটি ভিজ্যুয়াল স্টুডিওতে টগল করার একটি সহজ প্রকল্প। নীচে স্ক্রিনশট দেখুন।

  • প্রকল্পের সম্পত্তি
  • অ্যান্ড্রয়েড বিকল্পগুলি
  • অগ্রসর
  • তালিকাবদ্ধ
  • "এইচটিটিপি ক্লায়েন্ট প্রয়োগ" কে "অ্যান্ড্রয়েড" এ পরিবর্তন করুন
  • এসএসএল / টিএলএস প্রয়োগটি "নেটিভ টিএলএস 1.2+" এ পরিবর্তন করুন

এখানে চিত্র বর্ণনা লিখুন


1

আপনার ক্লাসে নীচের ঘোষণাগুলি যুক্ত করুন:

public const SslProtocols _Tls12 = (SslProtocols)0x00000C00;
public const SecurityProtocolType Tls12 = (SecurityProtocolType)_Tls12;

পরে:

var client = new HttpClient();

এবং:

ServicePointManager.SecurityProtocol = Tls12;
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 /*| SecurityProtocolType.Tls */| Tls12;

খুশি? :)


1

আমার এই সমস্যাটি ছিল এবং আমার ক্ষেত্রে সমাধানটি নির্বোধভাবে সহজ ছিল: প্রশাসকের অধিকার সহ ভিজ্যুয়াল স্টুডিও খুলুন। আমি উপরের সমস্ত সমাধান চেষ্টা করেছিলাম এবং এটি না করা পর্যন্ত এটি কার্যকর হয়নি। আশা করি এটি কারও মূল্যবান সময় সাশ্রয় করবে।


আপনি যেহেতু সাইটে নতুন, আপনি হয়ত জানেন না যে কোনও উত্তরের পাশে যদি সবুজ চেক থাকে তবে তার অর্থ এটি ওপি তার সমস্যার সঠিক সমাধান হিসাবে গ্রহণ করেছে। আপনি যদি আরও ভাল, আরও সম্পূর্ণ উত্তর না দিতে পারেন তবে বিশেষত এইরকম একটি পুরানো প্রশ্নের জন্য আর একটি উত্তর না দাওয়াই ভাল।
স্যাম ডব্লিউ

4
ঠিক আছে, আমার কাছে সমস্যাটিও ছিল এবং সবুজ চেক করা উত্তরটি কোনও উপকারে আসেনি। ভেবেছিলাম আমি একটি বিকল্প সমাধান দিচ্ছি যা আমাকে সাহায্য করেছে, কিন্তু ওহে, আমি পরের বার এটি করব না। মাইনাস পয়েন্টগুলির জন্য ধন্যবাদ;) আপনার দিনটি দুর্দান্ত।
লুসিয়ান সাতমারেয়ান

0

আপনি মডার্নএইচটিপিপি্লিয়েন্ট নিউজ প্যাকেজটি ব্যবহার করে দেখতে পারেন : প্যাকেজটি ডাউনলোড করার পরে, আপনি এটি এইভাবে প্রয়োগ করতে পারেন:

 var handler = new ModernHttpClient.NativeMessageHandler()
 {
     UseProxy = true,
 };


 handler.ClientCertificateOptions = ClientCertificateOption.Automatic;
 handler.PreAuthenticate = true;
 HttpClient client = new HttpClient(handler);

দুর্ভাগ্যক্রমে, এটি আমার রূপে কাজ করে নি। সমাধানটি ছিল xamarin পরিচালিত HTTP ক্লায়েন্ট থেকে অ্যান্ড্রয়েড-নেটিভ HTTP ক্লায়েন্টে স্যুইচ করে টিএলএস 1.3 সক্ষম করা। আমার উত্তর নীচে দেখুন।
এমএসসি

0

আমি ফেলিক্জের সাথে একমত তবে আমি সি # তে ব্যবহারের বিষয়টি পরিষ্কার করার জন্য একটি উদাহরণও যুক্ত করতে চাই। আমি নিম্নলিখিত হিসাবে উইন্ডোজ পরিষেবাতে SSL ব্যবহার করি।

    var certificatePath = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "bin");
    gateway = new GatewayService();
    gateway.PreAuthenticate = true;


    X509Certificate2 cert = new X509Certificate2(certificatePath + @"\Attached\my_certificate.pfx","certificate_password");
    gateway.ClientCertificates.Add(cert);

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
    gateway.UserAgent = Guid.NewGuid().ToString();
    gateway.Timeout = int.MaxValue;

যদি আমি এটি কোনও ওয়েব অ্যাপ্লিকেশনটিতে ব্যবহার করতে যাচ্ছি তবে আমি ঠিক প্রক্সি পক্ষের ক্ষেত্রে এর প্রয়োগটি পরিবর্তন করছি:

public partial class GatewayService : System.Web.Services.Protocols.SoapHttpClientProtocol // to => Microsoft.Web.Services2.WebServicesClientProtocol

-4

ত্রুটির জন্য:

অন্তর্নিহিত সংযোগটি বন্ধ ছিল: এসএসএল / টিএলএস সুরক্ষিত চ্যানেলের জন্য বিশ্বাসের সম্পর্ক স্থাপন করতে পারেনি।

আমি মনে করি যে আপনাকে নিম্নলিখিত কোড সহ শর্তহীন শংসাপত্র গ্রহণ করতে হবে

ServicePointManager.ServerCertificateValidationCallback += 
    (sender, cert, chain, sslPolicyErrors) => true;

যেমন বিরোধী তার প্রশ্নের উত্তরে লিখেছিলেন। নেট ক্লায়েন্ট এসএসএল ওয়েব এপিআইতে সংযুক্ত হচ্ছে


4
এটি শংসাপত্রের বৈধতা বাইপাস করছে। উত্পাদনে কখনও এটি করবেন না।
জন কর্সনেস

আচ্ছা @ জনকর্নস, অভিজিৎ যদি কিছু পাবলিক ওয়েবএপিআই সার্ভার অ্যাক্সেস করে থাকে তবে আমি মনে করি না যে সে এ সম্পর্কে বেশি কিছু করতে পারে। এটা আমার মামলা ছিল।
নেমানজা সিমোভিć
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.