ฉันมีแอพพลิเคชั่น ASP.NET ทำงานบนไคลเอนต์เซิร์ฟเวอร์ (W2k3, IIS6, .NET 2.0) FWIW นี่เป็นตัวอย่างการทดสอบแต่ยังไม่ได้ย้ายไปยังการผลิต ดังนั้นจึงไม่ทำงานภายใต้ SSL, load balancing, ฯลฯ
เมื่อฉันเข้าถึงหน้าใดหน้าหนึ่งบนเซิร์ฟเวอร์ของพวกเขาจากสำนักงานของเราหน้านั้นจะถูกโจมตีหนึ่งครั้ง การตรวจสอบบันทึก IIS (c: WINDOWS \ system32 \ LogFiles \ W3SVC1) แสดง GET สำหรับหน้านั้นจากนั้นฉันกดปุ่มบนหน้าและล็อกไฟล์แสดง POST ดูเหมือนว่าจะทำงานได้ดีจนถึงตอนนี้
ตอนนี้เมื่อฉันเข้าสู่เครือข่ายของลูกค้าจากระยะไกลและเข้าถึงหน้าจากหนึ่งในเครื่องท้องถิ่นของพวกเขาไฟล์บันทึกจะแสดง GET จากนั้นฉันกดปุ่มบนหน้าและบันทึกจะแสดงสอง POST ในวินาทีเดียวกัน อันแรกแสดงสถานะ (สถานะ sc, sc-substatus, sc-win32-status) 200 0 64, อันที่สองแสดง 200 0 0
ในล็อกไฟล์ทั้งสองโพสต์เหมือนกัน โดยทั่วไปบันทึกจะมีลักษณะเช่นนี้ (ยกเว้นฉันปิดบังข้อมูลบางส่วน):
#Fields: วันที่เวลา s-ip cs-method cs-uri-stem cs-uri-query s-port cs- ชื่อผู้ใช้ c-ip cs (ผู้ใช้ตัวแทน) sc- สถานะ sc-substatus sc-win32- สถานะ 2009-08-11 20:19:32 xxxx รับ /File.aspx - 80 - yyyy Mozilla / 4.0 + (ใช้งานได้; + MSIE + 8.0; + Windows + NT + 6.0; + WOW64; + Trident / 4.0; + SLCC1; + + .NET CLR + 2.0.50727. Net + + + CLR 3.5.21022. Net + + + CLR 3.5.30729. Net + + + CLR 3.0.30618; + MDDR; + OfficeLiveConnector.1.4; + OfficeLivePatch .0.0) 200 0 0 2009-08-11 20:19:45 xxxx POST /File.aspx - 80 - yyyy Mozilla / 4.0 + (เข้ากันได้; + MSIE + 8.0; + Windows + NT + 6.0; + WOW64; + Trident / 4.0; + SLCC1; + + .NET CLR + 2.0.50727. Net + + + CLR 3.5.21022. Net + + + CLR 3.5.30729. Net + + + CLR 3.0.30618; + MDDR; + OfficeLiveConnector.1.4; + OfficeLivePatch .0.0) 200 0 64 2009-08-11 20:19:45 xxxx POST /File.aspx - 80 - yyyy Mozilla / 4.0 + (เข้ากันได้; + MSIE + 8.0; + Windows + NT + 6.0; + WOW64; + Trident / 4.0; + SLCC1; + + .NET CLR + 2.0.50727. Net + + + CLR 3.5.21022. Net + + + CLR 3.5.30729. Net + + + CLR 3.0.30618; + MDDR; + OfficeLiveConnector.1.4; + OfficeLivePatch .0.0) 200 0 0
ปัญหาคือหน้ากำลังถูกตีสองครั้ง ฐานข้อมูลทำการดำเนินการสำหรับการร้องขอแรกจากนั้นการร้องขอที่สองตรวจพบว่าการดำเนินการที่ซ้ำกันจะถูกดำเนินการและส่งข้อผิดพลาด ผู้ใช้คิดว่าการดำเนินการล้มเหลว แต่ประสบความสำเร็จจริง
คำอธิบายข้อผิดพลาดของ sc-win32-status 64 คือ: "ชื่อเครือข่ายที่ระบุไม่สามารถใช้ได้อีกต่อไป" สิ่งนี้ทำให้ฉันเชื่อว่าเนื่องจากคำขอ POST ทั้งสองแสดงสถานะ HTTP ที่ 200 ว่าเซิร์ฟเวอร์ประสบความสำเร็จในการให้บริการคำขอ แต่ลูกค้าจะไม่ได้รับแจ้งและส่งคำขออีกครั้ง
ฉันจะแก้ไขปัญหานี้ได้อย่างไร
แนวคิดใดที่ทำให้เกิดพฤติกรรมนี้ในเครือข่ายภายในเท่านั้น
ฉันควรพูดถึงสิ่งนี้เกิดขึ้นที่เว็บไซต์ลูกค้าสองแห่งแยกกัน แต่จะไม่เกิดขึ้นที่ไซต์ลูกค้าอื่นหกแห่งของเราหรือในสำนักงานของเราหรือเชื่อมต่อกับลูกค้าทั้งแปดของเราทางเว็บ
สิ่งที่จะทำให้สามารถทำซ้ำได้ 100% ของเวลาบนเครือข่ายท้องถิ่นของพวกเขา แต่ 0% ของเวลาที่อื่น?
อัปเดต:ฉันพบคำขอ POST ที่ทำซ้ำจำนวนน้อยมากมีสถานะ sc-win32- เป็น 995 แทนที่จะเป็น 64 ตามที่รายงานไว้ในตอนแรก คำอธิบายข้อผิดพลาดของ sc-win32-status = 995 คือ: "การดำเนินการ I / O ถูกยกเลิกเนื่องจากการออกจากเธรดหรือการร้องขอแอปพลิเคชัน" สิ่งนี้ไม่สมเหตุสมผล (เนื่องจากฉันมีสิทธิ์เข้าถึงโค้ดอย่างเต็มที่) ฉันยังไม่เข้าใจว่าเกิดปัญหานี้ขึ้นได้อย่างไร แต่รหัสข้อผิดพลาดใหม่ทำให้ฉันเชื่อว่าอาจไม่ใช่ปัญหาเครือข่ายหลังจากทั้งหมดและฉันกำลังตรวจสอบความเป็นไปได้ของข้อผิดพลาดรหัสแบบสุ่ม