บันทึก IIS แสดง sc-win32-status = 64 แต่ผ่านเครือข่ายบางเครือข่ายเท่านั้น


12

ฉันมีแอพพลิเคชั่น 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 ถูกยกเลิกเนื่องจากการออกจากเธรดหรือการร้องขอแอปพลิเคชัน" สิ่งนี้ไม่สมเหตุสมผล (เนื่องจากฉันมีสิทธิ์เข้าถึงโค้ดอย่างเต็มที่) ฉันยังไม่เข้าใจว่าเกิดปัญหานี้ขึ้นได้อย่างไร แต่รหัสข้อผิดพลาดใหม่ทำให้ฉันเชื่อว่าอาจไม่ใช่ปัญหาเครือข่ายหลังจากทั้งหมดและฉันกำลังตรวจสอบความเป็นไปได้ของข้อผิดพลาดรหัสแบบสุ่ม


คุณเปิดใช้งานฟิลด์บันทึกทั้งหมดบนเซิร์ฟเวอร์หรือไม่ คุณสามารถโพสต์ข้อมูลบันทึกเพิ่มเติมสำหรับคำขอ POST 2 รายการได้หรือไม่
squillman

ฉันไม่แน่ใจว่าฟิลด์ทั้งหมดเปิดใช้งานหรือไม่ แต่ฉันวางตัวอย่างของสิ่งที่เราเห็น
wweicker

แค่คิด แต่สิ่งนี้จะเกิดขึ้นถ้าผู้ใช้คนหนึ่งกำลังทำมันในขณะที่อยู่ในเครื่องเดียวกันหรือไม่? ฉันคิดว่าอาจจะมีการคลิกเมาส์ที่ไม่เกี่ยวข้องกับการเข้าสู่เซสชันระยะไกลของคุณ มันทำสิ่งเดียวกันถ้าคุณแท็บปุ่มและเปิดใช้งานโดยกดปุ่ม Enter?
squillman

1
ปุ่มถูกสร้างขึ้นเพื่อซ่อนตัวเองหลังจากถูกสลับไม่ว่าจะเป็นการคลิกหรือการแท็บและกด Enter ปุ่มจะไม่ปรากฏให้เห็นเพื่อป้องกันการ "ดับเบิลคลิก" โดยไม่ตั้งใจ นี่คือสิ่งที่เราคิดว่าเกิดขึ้น แต่หลังจากอัปเดตปุ่มเพื่อซ่อนตัวเองโดยใช้ javascript เราพบปัญหาเครือข่ายพื้นฐาน
wweicker

คำตอบ:


18

นี่คือความเข้าใจของฉันของปัญหาจนถึง:

  • sc-win32-status 64 หมายถึง“ ชื่อเครือข่ายที่ระบุไม่สามารถใช้งานได้อีกต่อไป”
  • หลังจาก IIS ได้ส่งคำตอบสุดท้ายไปยังไคลเอนต์โดยทั่วไปแล้วจะรอข้อความ ACK จากไคลเอนต์
  • บางครั้งลูกค้าจะรีเซ็ตการเชื่อมต่อแทนที่จะส่ง ACK สุดท้ายกลับไปที่เซิร์ฟเวอร์ นี่ไม่ใช่การปิดการเชื่อมต่อที่สวยงามดังนั้น IIS จะบันทึกรหัส“ 64”
  • ไคลเอ็นต์จำนวนมากจะรีเซ็ตการเชื่อมต่อเมื่อดำเนินการเสร็จแล้วเพื่อเพิ่มช่องเสียบแทนที่จะปล่อยไว้ใน TIME_WAIT / CLOSE_WAIT
  • ผู้รับมอบฉันทะมักจะทำสิ่งนี้มากกว่าที่คนอื่นทำ

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


คุณคาดว่าจะอ้างอิงการอ้างอิงของคุณ forums.devshed.com/showpost.php?p=1686138&postcount=9
Amit Naidu

2

ฉันประสบปัญหาเดียวกันนี้เมื่อพยายามให้บริการไฟล์ไบนารี gzipped จาก IIS6 ผ่านพร็อกซีเซิร์ฟเวอร์ ฉันไม่พบปัญหาใด ๆ เมื่อไปที่เว็บไซต์โดยตรง

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

ฉันปิดการบีบอัด gzip สำหรับไฟล์ไบนารีในรหัสของฉันและปัญหาหยุดทำงาน


-2

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

บางทีนั่นอาจช่วย ...

เสื่อ.


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