ไม่สามารถอ่านข้อมูลจากการเชื่อมต่อการขนส่ง: การเชื่อมต่อที่มีอยู่ถูกบังคับปิดโดยโฮสต์ระยะไกล


106

ฉันมีแอปเซิร์ฟเวอร์และบางครั้งเมื่อไคลเอนต์พยายามเชื่อมต่อฉันได้รับข้อผิดพลาดต่อไปนี้:

ป้อนคำอธิบายภาพที่นี่

หมายเหตุ: "ไม่สามารถรับสตรีมจากไคลเอนต์หรือการเข้าสู่ระบบล้มเหลว" เป็นข้อความที่ฉันเพิ่มในคำสั่ง catch

และบรรทัดที่หยุด (sThread: บรรทัด 96) คือ:

tcpClient = (TcpClient)client;
clientStream = tcpClient.GetStream();
sr = new StreamReader(clientStream);
sw = new StreamWriter(clientStream);

// line 96:                 
a = sr.ReadLine();

อะไรอาจทำให้เกิดปัญหานี้? โปรดทราบว่ามันไม่ได้เกิดขึ้นตลอดเวลา

คำตอบ:


64

ข้อผิดพลาดนี้มักจะหมายความว่าเครื่องเป้าหมายกำลังทำงานอยู่ แต่ไม่มีบริการที่คุณพยายามเชื่อมต่อ (ไม่ว่าจะหยุดทำงานขัดข้องหรือกำลังยุ่งอยู่กับคำขออื่น)

เป็นภาษาอังกฤษ: มีการเชื่อมต่อกับเครื่อง (โฮสต์ระยะไกล / เซิร์ฟเวอร์ / พีซีที่บริการทำงานที่) แต่เนื่องจากไม่มีบริการบนเครื่องเครื่องนั้นจึงไม่ทราบว่าจะทำอย่างไรกับคำขอ

หากไม่สามารถเชื่อมต่อกับเครื่องคุณจะเห็นข้อผิดพลาดอื่น ฉันลืมไปว่ามันคืออะไร แต่เป็นไปตามบรรทัดของ "Service Unreachable" หรือ "Unavailable"

แก้ไข - เพิ่ม

เป็นไปได้ว่าสาเหตุนี้เกิดจากไฟร์วอลล์บล็อกพอร์ต แต่เนื่องจากคุณบอกว่าไม่ต่อเนื่อง ("บางครั้งเมื่อไคลเอ็นต์พยายามเชื่อมต่อ") จึงไม่น่าเป็นไปได้มาก ฉันไม่ได้รวมไว้ในตอนแรกเพราะฉันได้แยกแยะมันออกทางจิตใจก่อนที่จะตอบกลับ


1
สิ่งนี้ก็คือเมื่อฉันเริ่มเซิร์ฟเวอร์มีไคลเอนต์ 50 ตัวเชื่อมต่อกับเซิร์ฟเวอร์ของฉัน ฉันใช้สัญญาณการรอเมื่อยอมรับไคลเอนต์แล้ว .. บางอย่างเช่น while (Program.waitToFinishLoginAtClient == true && ajutor <30) {Thread.Sleep (300); ajutor ++; } ไคลเอนต์ = this.tcpListener.AcceptTcpClient (); Program.waitToFinishLoginAtClient = true; ........... และ Program.waitToFinishAtClient ได้รับการแก้ไขในเธรดที่มีไคลเอนต์
Alex

"รอ" นี้จะเป็นปัญหาได้ไหม
Alex

1
ฉันควรปล่อยให้มันเป็นอย่างนั้นหรือ ไม่รอ ?
Alex

1
ฉันคิดว่าการรอคือปัญหา ฉันไม่ทราบรหัสของคุณเพียงพอที่จะแน่ใจ แต่ก็น่าจะเป็นไปได้ แค่อยากรู้ว่าคุณสร้างบริการของคุณเองด้วยวิธี "ยาก" หรือว่าคุณกำลังใช้ WCF หรือแม้แต่ Remoting สำหรับสิ่งนี้ ...
เดวิด

จากรหัสเล็กน้อยที่นี่ดูเหมือนว่าฉันจะหลีกเลี่ยงปัญหา "รอ" ได้หากอยู่ในเธรดแยกต่างหากสำหรับแต่ละ conneciton ในกรณีที่เดาถูกนี่คือตัวอย่างของบริการ TCP แบบมัลติเธรดพร้อมมัลติเธรดที่อาจช่วยคุณได้: switchonthecode.com/tutorials/…
David

187

ฉันได้รับข้อผิดพลาดนี้เมื่อเรียกใช้บริการเว็บ ปัญหายังเกี่ยวข้องกับความปลอดภัยระดับการขนส่ง ฉันสามารถเรียกใช้บริการเว็บผ่านโครงการเว็บไซต์ แต่เมื่อใช้รหัสเดิมซ้ำในโครงการทดสอบฉันจะได้รับ WebException ที่มีข้อความนี้ การเพิ่มบรรทัดต่อไปนี้ก่อนทำการโทรสามารถแก้ไขปัญหาได้:

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

แก้ไข

System.Net.ServicePointManager.SecurityProtocol - คุณสมบัตินี้เลือกเวอร์ชันของโปรโตคอล Secure Sockets Layer (SSL) หรือ Transport Layer Security (TLS) เพื่อใช้สำหรับการเชื่อมต่อใหม่ที่ใช้โครงร่าง Secure Hypertext Transfer Protocol (HTTPS) เท่านั้น การเชื่อมต่อที่มีอยู่จะไม่เปลี่ยนแปลง

ฉันเชื่อว่าการSecurityProtocolกำหนดค่ามีความสำคัญระหว่างการจับมือ TLS เมื่อเลือกเวอร์ชันโปรโตคอล

TLS handshake - โปรโตคอลนี้ใช้เพื่อแลกเปลี่ยนข้อมูลทั้งหมดที่ทั้งสองฝ่ายต้องการสำหรับการแลกเปลี่ยนข้อมูลแอปพลิเคชันจริงโดย TLS

ClientHello - ลูกค้าส่งข้อความ ClientHello โดยระบุเวอร์ชันโปรโตคอล TLS สูงสุดที่รองรับ ...

ServerHello - เซิร์ฟเวอร์ตอบสนองด้วยข้อความ ServerHello ซึ่งมีเวอร์ชันโปรโตคอลที่เลือก ... เวอร์ชันโปรโตคอลที่เลือกควรสูงที่สุดที่ทั้งไคลเอนต์และเซิร์ฟเวอร์รองรับ ตัวอย่างเช่นหากไคลเอนต์รองรับ TLS เวอร์ชัน 1.1 และเซิร์ฟเวอร์รองรับเวอร์ชัน 1.2 ควรเลือกเวอร์ชัน 1.1 ไม่ควรเลือกเวอร์ชัน 1.2


8
สิ่งนี้ช่วยฉัน! ขอบคุณผู้ชาย. ในดีบักเกอร์ของฉันฉันพยายามเรียกใช้บริการ https ในขณะที่ทดสอบและมีปัญหาที่ OP มี
Blair Holmes

6
เรารู้เพิ่มเติมเกี่ยวกับวิธีการ / ทำไมจึงได้ผล ฉันประสบปัญหากับการโทร PostAsync และดูเหมือนว่าจะแก้ไขข้อผิดพลาดของฉันได้เช่นกัน ดีใจที่ได้ผล แต่ฉันก็อยากรู้เหมือนกันว่าทำไม
Kevin Matlock

1
@HansVonn ขอบคุณสำหรับสิ่งนี้! ช่วยให้ฉันประหยัดเวลาได้มาก - เกี่ยวกับเหตุผลที่มันใช้งานได้มันเป็นเพียงการ จำกัด เวอร์ชัน TLS ที่คุณใช้เมื่อคุณเชื่อมต่อ
สับสนและใช้

1
ไม่อยากจะเชื่อเลยว่าสิ่งนี้มีฉันอีกครั้ง! ขอบคุณ
Sergio A.

2
ขอบคุณ! นี่ทำให้ฉันบ้า
mknopf

34

สถานการณ์กรณีเฉพาะของฉันคือบริการแอป Azure มีเวอร์ชัน TLS ขั้นต่ำที่เปลี่ยนเป็น 1.2

ฉันไม่รู้ว่านั่นเป็นค่าเริ่มต้นจากนี้ไปหรือเปล่า แต่การเปลี่ยนกลับเป็น 1.0 ทำให้มันใช้งานได้

คุณสามารถเข้าถึงการตั้งค่าภายใน "การตั้งค่า SSL"


7
โอ้พระเจ้าขอบคุณมาก! ฉันติดอยู่กับเรื่องนี้มานานมากและฉันได้ตรวจสอบการตั้งค่า SSL ของเว็บแอปและค่าต่ำสุดถูกตั้งไว้ที่ 1.2 แทนที่จะเป็น 1.0 เมื่อฉันเปลี่ยนกลับเป็น 1.0 และรีสตาร์ทเว็บแอปก็ใช้งานได้! ขอบคุณมาก!
Mason

1
ขอบคุณมาก @ hugo-hilárioมันก็ใช้ได้ผลสำหรับฉันเช่นกัน! คุณหาวิธีแก้ปัญหาที่ยุ่งยากแบบนี้มาบนโลกได้อย่างไร! : D
hosjay

@hosjay มันเป็นนรกสำหรับฉันเช่นกัน :)
Hugo Hilário

3
บันทึกเพื่อนร่วมวันของฉัน!
Nitesh

ฉันมีปัญหานี้สำหรับ Azure Function v2
Pieter Heemeryck

17

ไม่แน่ใจว่าการแก้ไขใดในบล็อกโพสต์เหล่านี้ช่วยได้ แต่หนึ่งในนั้นจัดการปัญหานี้ให้ฉัน ...

http://briancaos.wordpress.com/2012/07/06/unable-to-read-data-from-the-transport-connection-the-connection-was-closed/

เคล็ดลับที่ช่วยฉันคือเลิกใช้ WebRequest และใช้ HttpWebRequest แทน HttpWebRequest ช่วยให้ฉันเล่นกับการตั้งค่าที่สำคัญ 3 อย่าง:

และ

http://briancaos.wordpress.com/2012/06/15/an-existing-connection-was-forcably-closed-by-the-remote-host/

  • ขั้นตอนที่ 1: ปิดการใช้งาน KeepAlive
  • ขั้นตอนที่ 2: ตั้งค่า ProtocolVersion เป็นเวอร์ชัน 10
  • ขั้นตอนที่ 3: จำกัด จำนวนจุดบริการ

1
คำตอบนี้คือสิ่งที่แก้ปัญหาเดียวกันนี้ให้กับฉัน ฉันปิด 'Keep Alive' ในส่วน Http Response Headers ใน IIS7
drzounds

ฉันควรเพิ่มว่าฉันต้องเพิ่มรหัสนี้ใน Reference.cs สำหรับบริการเว็บที่มีพฤติกรรมนั้นด้วย ได้รับการป้องกันแทนที่ System.Net.WebRequest GetWebRequest (Uri uri) {System.Net.HttpWebRequest webRequest = (System.Net.HttpWebRequest) base.GetWebRequest (uri); webRequest.KeepAlive = false; ส่งคืน webRequest; }
drzounds

11

การโทรไปยังบริการ HTTPS จากเซิร์ฟเวอร์ของเรายังทำให้เกิดข้อยกเว้น" ไม่สามารถอ่านข้อมูลจากการเชื่อมต่อการขนส่ง: การเชื่อมต่อที่มีอยู่ถูกบังคับให้ปิด " แม้ว่าบริการ HTTP จะทำงานได้ดี ใช้ Wireshark เพื่อดูว่าเป็นความล้มเหลวในการจับมือ TLS จบลงด้วยการที่ชุดการเข้ารหัสบนเซิร์ฟเวอร์จำเป็นต้องได้รับการอัปเดต


นี่คือสิ่งที่เกิดขึ้นกับฉัน A ถูกส่งใบรับรองที่หมดอายุไปยัง SSL conection ต่ออายุใบรับรองและทำงาน
Guilherme de Jesus Santos

8

ตามที่ "Hans Vonn" ตอบกลับ

การเพิ่มบรรทัดต่อไปนี้ก่อนทำการโทรสามารถแก้ไขปัญหาได้:

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

หลังจากเพิ่มโปรโตคอลความปลอดภัยและทำงานได้ดี แต่ฉันต้องเพิ่มก่อนการเรียก API ทุกครั้งซึ่งไม่ดี ฉันเพิ่งอัปเกรด. net framework เวอร์ชันอย่างน้อย 4.6 และทำงานตามที่คาดไว้ไม่จำเป็นต้องเพิ่มก่อนการเรียก API ทุกครั้ง


1
ขอบคุณมาก. คุณทำให้วันของฉัน อาจมีประโยชน์สำหรับบางคนถ้าฉันพูดถึงก่อนหน้านี้ฉันยังทดสอบการปิดใช้งานไฟร์วอลล์และเพิ่ม ServicePointManager.ServerCertificateValidationCallback แต่ไม่ทำงาน
Tekin

5

วิธีนี้จะไม่ช่วยสำหรับปัญหาที่ไม่ต่อเนื่อง แต่อาจเป็นประโยชน์สำหรับผู้อื่นที่มีปัญหาคล้ายกัน

ฉันโคลน VM และเริ่มต้นบนเครือข่ายอื่นด้วยที่อยู่ IP ใหม่ แต่ไม่ได้เปลี่ยนการเชื่อมโยงใน IIS Fiddler แสดงให้ฉันเห็นว่า "ไม่สามารถอ่านข้อมูลจากการเชื่อมต่อการขนส่ง: การเชื่อมต่อที่มีอยู่ถูกปิดโดยโฮสต์ระยะไกล" และ IE ก็บอกฉันว่า "เปิด TLS 1.0, TLS 1.1 และ TLS 1.2 ในการตั้งค่าขั้นสูง" การเปลี่ยนการเชื่อมโยงกับที่อยู่ IP ใหม่ช่วยแก้ปัญหาให้ฉันได้


2

ด้วยเหตุผลบางประการการเชื่อมต่อกับเซิร์ฟเวอร์จึงขาดหายไป อาจเป็นไปได้ว่าเซิร์ฟเวอร์ปิดการเชื่อมต่ออย่างชัดแจ้งหรือข้อบกพร่องบนเซิร์ฟเวอร์ทำให้ปิดโดยไม่คาดคิด หรือบางสิ่งระหว่างไคลเอนต์และเซิร์ฟเวอร์ (สวิตช์หรือเราเตอร์) ทำให้การเชื่อมต่อหลุด

อาจเป็นรหัสเซิร์ฟเวอร์ที่ทำให้เกิดปัญหาและอาจไม่ใช่ หากคุณมีสิทธิ์เข้าถึงรหัสเซิร์ฟเวอร์คุณสามารถใส่การดีบักเพื่อแจ้งให้คุณทราบเมื่อการเชื่อมต่อไคลเอ็นต์ถูกปิด นั่นอาจเป็นตัวบ่งชี้ว่าเมื่อใดและเหตุใดจึงหลุดการเชื่อมต่อ

ในไคลเอนต์คุณต้องเขียนโค้ดของคุณเพื่อคำนึงถึงความเป็นไปได้ที่เซิร์ฟเวอร์จะล้มเหลวได้ตลอดเวลา นั่นเป็นเพียงวิธีเดียว: การเชื่อมต่อเครือข่ายไม่น่าเชื่อถือโดยเนื้อแท้


2

สิ่งนี้ช่วยแก้ปัญหาของฉันได้ ฉันเพิ่มบรรทัดนี้ก่อนที่จะมีการร้องขอ:

System.Net.ServicePointManager.Expect100Continue = false;

ดูเหมือนว่ามีพร็อกซีในลักษณะของเซิร์ฟเวอร์ที่ไม่รองรับพฤติกรรมต่อเนื่อง 100 ครั้ง


1

ฉันได้รับปัญหานั้นในอดีต ฉันใช้PostgreSQLและเมื่อฉันเรียกใช้โปรแกรมบางครั้งมันก็เชื่อมต่อและบางครั้งมันก็แสดงข้อผิดพลาดเช่นนั้น

เมื่อฉันทดสอบรหัสของฉันฉันใส่รหัสการเชื่อมต่อที่บรรทัดแรกใต้แบบฟอร์มสาธารณะ นี่คือตัวอย่าง:

ก่อน:

    public Form1()
        {
        //HERE LIES SOME CODES FOR RESIZING MY CONTROLS DURING RUNTIME
        //CODE
        //CODE AGAIN
        //ANOTHER CODE
        //CODE NA NAMAN
        //CODE PA RIN!





        //Connect to Database to generate auto number
        NpgsqlConnection iConnect = new NpgsqlConnection("Server=localhost;Port=5432;User ID=postgres;Password=pass;Database=DB");
        iConnect.Open();
        NpgsqlCommand iQuery = new NpgsqlCommand("Select * from table1", iConnect);
        NpgsqlDataReader iRead = iQuery.ExecuteReader();
        NpgsqlDataAdapter iAdapter = new NpgsqlDataAdapter(iQuery);

        DataSet iDataSet = new DataSet();
        iAdapter.Fill(iDataSet, "ID");

        MessageBox.Show(iDataSet.Tables["ID"].Rows.Count.ToString());
        }

ตอนนี้:

    public Form1()
        {
        //Connect to Database to generate auto number
        NpgsqlConnection iConnect = new NpgsqlConnection("Server=localhost;Port=5432;User ID=postgres;Password=pass;Database=DB");
        iConnect.Open();
        NpgsqlCommand iQuery = new NpgsqlCommand("Select * from table1", iConnect);
        NpgsqlDataReader iRead = iQuery.ExecuteReader();
        NpgsqlDataAdapter iAdapter = new NpgsqlDataAdapter(iQuery);

        DataSet iDataSet = new DataSet();
        iAdapter.Fill(iDataSet, "ID");

        MessageBox.Show(iDataSet.Tables["ID"].Rows.Count.ToString());





        //HERE LIES SOME CODES FOR RESIZING MY CONTROLS DURING RUNTIME
        //CODE
        //CODE AGAIN
        //ANOTHER CODE
        //CODE NA NAMAN
        //CODE PA RIN!

        }

ฉันคิดว่าโปรแกรมต้องอ่านการเชื่อมต่อก่อนที่จะทำอะไรฉันไม่รู้แก้ไขฉันถ้าฉันผิด แต่จากการวิจัยของฉันมันไม่ใช่ปัญหารหัส - จริงๆแล้วมันมาจากตัวเครื่อง

Happy Coding!


1
System.Net.ServicePointManager.Expect100Continue = false;

ปัญหานี้บางครั้งเกิดขึ้นเนื่องจากสาเหตุของพร็อกซีเซิร์ฟเวอร์ที่ใช้งานบนเว็บเซิร์ฟเวอร์ หากต้องการข้ามพร็อกซีเซิร์ฟเวอร์โดยใส่บรรทัดนี้ก่อนเรียกใช้บริการส่ง


0

ฉันมีแอปพลิเคชันของบุคคลที่สาม (Fiddler) ทำงานอยู่เพื่อลองดูคำขอที่ส่งไป การปิดแอปพลิเคชันนี้แก้ไขให้ฉัน


0

เรามีปัญหาที่คล้ายกันมากโดยที่เว็บไซต์ของลูกค้าพยายามเชื่อมต่อกับบริการ Web API ของเราและได้รับข้อความเดียวกันนั้น สิ่งนี้เริ่มเกิดขึ้นโดยสิ้นเชิงจากสีน้ำเงินเมื่อไม่มีการเปลี่ยนแปลงรหัสหรือการอัปเดต Windows บนเซิร์ฟเวอร์ที่ IIS กำลังทำงานอยู่

ในกรณีของเราปรากฎว่าเว็บไซต์การโทรใช้. Net เวอร์ชันที่รองรับเฉพาะ TLS 1.0 และด้วยเหตุผลบางประการเซิร์ฟเวอร์ที่ IIS ของเรากำลังทำงานอยู่หยุดทำงานดูเหมือนว่าจะหยุดรับสาย TLS 1.0 ในการวินิจฉัยว่าเราต้องเปิดใช้งาน TLS อย่างชัดเจนผ่านรีจิสทรีบนเซิร์ฟเวอร์ของ IIS จากนั้นรีสตาร์ทเซิร์ฟเวอร์นั้น นี่คือคีย์ reg:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS
    1.0\Client] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS
    1.0\Server] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS
    1.1\Client] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS
    1.1\Server] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS
    1.2\Client] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS
    1.2\Server] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001

If that doesn't do it, you could also experiment with adding the entry for SSL 2.0:


    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client]
    "DisabledByDefault"=dword:00000000
    "Enabled"=dword:00000001

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server]
    "DisabledByDefault"=dword:00000000
    "Enabled"=dword:00000001

คำตอบของฉันสำหรับคำถามอื่นที่นี่มีสคริปต์พาวเวอร์เชลล์ที่เราใช้เพื่อเพิ่มรายการ:

หมายเหตุ:การเปิดใช้งานโปรโตคอลความปลอดภัยแบบเก่าไม่ใช่ความคิดที่ดีคำตอบที่ถูกต้องในกรณีของเราคือให้เว็บไซต์ไคลเอนต์อัปเดตโค้ดเพื่อใช้ TLS 1.2 แต่รายการรีจิสทรีด้านบนสามารถช่วยวินิจฉัยปัญหาได้ในตอนแรก


0

สาเหตุที่เกิดขึ้นกับฉันคือฉันมีการพึ่งพาซ้ำในผู้ให้บริการ DI ของฉัน ในกรณีของฉันฉันมี:

services.AddScoped(provider => new CfDbContext(builder.Options));
services.AddScoped(provider => provider.GetService<CfDbContext>());

การแก้ไขคือเพียงแค่ลบการลงทะเบียนบริการที่กำหนดขอบเขตที่สองออก

services.AddScoped(provider => new CfDbContext(builder.Options));

0

หากคุณมีใบรับรอง https บนโดเมนตรวจสอบให้แน่ใจว่าคุณมีการผูก https กับชื่อโดเมนใน IIS ใน IIS -> เลือกโดเมนของคุณ -> คลิกที่ Bindings Site Bindings Window จะเปิดขึ้น เพิ่มการเชื่อมโยงสำหรับ https


0

มีปัญหาที่คล้ายกันและได้รับข้อผิดพลาดต่อไปนี้ขึ้นอยู่กับว่าฉันใช้แอปใดและเราข้ามไฟร์วอลล์ / ตัวโหลดบาลานเซอร์หรือไม่:

การจับมือ HTTPS กับ [blah] (สำหรับ # 136) ล้มเหลว System.IO.IOException ไม่สามารถอ่านข้อมูลจากการเชื่อมต่อการขนส่ง: การเชื่อมต่อที่มีอยู่ถูกบังคับโดยรีโมตโฮสต์

และ

ReadResponse () ล้มเหลว: เซิร์ฟเวอร์ไม่ส่งคืนการตอบสนองที่สมบูรณ์สำหรับคำขอนี้ เซิร์ฟเวอร์ส่งคืน 0 ไบต์

ปัญหากลับกลายเป็นว่าพลาดใบรับรองเซิร์ฟเวอร์ SSL และไม่ได้ติดตั้งบนเซิร์ฟเวอร์สองเครื่อง


0

ลองตรวจสอบว่าคุณสามารถจับมือได้ตั้งแต่แรกหรือไม่ ฉันมีปัญหานี้มาก่อนเมื่ออัปโหลดไฟล์และฉันพบเพียงว่าปัญหาคือเส้นทางที่ไม่มีอยู่จริงเมื่อฉันลบการอัปโหลดและตรวจสอบว่าสามารถเข้าสู่ระบบโดยใช้พารามิเตอร์ได้หรือไม่


0

อีกทางเลือกหนึ่งคือการตรวจสอบรหัสข้อผิดพลาดที่สร้างขึ้นโดยใช้บล็อกลองจับและก่อนอื่นให้ตรวจจับ WebException

ในกรณีของฉันรหัสข้อผิดพลาดคือ "SendFailure" เนื่องจากปัญหาใบรับรองใน URL HTTPS เมื่อฉันกด HTTP ซึ่งได้รับการแก้ไขแล้ว

https://docs.microsoft.com/en-us/dotnet/api/system.net.webexceptionstatus?redirectedfrom=MSDN&view=netframework-4.8


0

สำหรับฉันมันเป็นปัญหาที่ในการผูก IIS นั้นมีที่อยู่ IP ของเว็บเซิร์ฟเวอร์ ฉันเปลี่ยนให้ใช้ IP ที่ไม่ได้กำหนดทั้งหมดและแอปพลิเคชันของฉันก็เริ่มทำงาน


0

ฉันพบข้อผิดพลาดเมื่อ python clr เรียกใช้แบบสอบถาม mdx ไปยังบริการวิเคราะห์ของ Microsoft โดยใช้ adomd

ฉันแก้ไขด้วยความช่วยเหลือของHans Vonnและนี่คือเวอร์ชันpython :

clr.AddReference("System.Net")
from System.Net import ServicePointManager, SecurityProtocolType 
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls

0

สำหรับผู้ที่อาจพบสิ่งนี้ในภายหลังหลังจาก. NET เวอร์ชัน 4.6 ฉันก็ประสบปัญหานี้เช่นกัน

ตรวจสอบให้แน่ใจว่าคุณได้ตรวจสอบไฟล์ web.config ของคุณสำหรับบรรทัดต่อไปนี้:

<compilation debug="true" targetFramework="4.5">
...
<httpRuntime targetFramework="4.5" />

หากคุณใช้งาน. NET เวอร์ชัน 4.6.x หรือสูงกว่าบนเซิร์ฟเวอร์ตรวจสอบให้แน่ใจว่าคุณได้ปรับค่า targetFramework เหล่านี้ให้ตรงกับเวอร์ชันของเฟรมเวิร์กบนเซิร์ฟเวอร์ของคุณ หากเวอร์ชันของคุณอ่านน้อยกว่า 4.6.x ฉันขอแนะนำให้คุณอัปเกรด. NET และใช้เวอร์ชันที่ใหม่กว่าเว้นแต่รหัสของคุณจะขึ้นอยู่กับเวอร์ชันที่เก่ากว่า (ซึ่งในกรณีนี้คุณควรพิจารณาอัปเดต)

ฉันเปลี่ยน targetFrameworks เป็น 4.7.2 และปัญหาก็หายไป:

<compilation debug="true" targetFramework="4.7.2">
...
<httpRuntime targetFramework="4.7.2" />

เฟรมเวิร์กที่ใหม่กว่าจะแยกปัญหานี้ออกโดยใช้โปรโตคอลที่ดีที่สุดและบล็อกสิ่งที่ไม่ปลอดภัยหรือล้าสมัย หากบริการระยะไกลที่คุณพยายามเชื่อมต่อหรือโทรแจ้งข้อผิดพลาดนี้อาจเป็นไปได้ว่าพวกเขาไม่รองรับโปรโตคอลเดิมอีกต่อไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.