วิธีการตรวจสอบโปรแกรมระยะยาวโดยทางโปรแกรม


11

สิ่งที่ฉันได้ในขณะนี้สามารถสรุปได้ด้วยรหัสหลอกนี้:

public static void Main(string[] args)
{
    var listOfObjects = Database.GetObjectsToUploadToOnlineService();
    Parallel.ForEach(Upload)
}

private static void Upload(MyUploadObject obj)
{
    //Build object (takes a few milliseconds)
    //Format to JSON (takes a few more milliseconds)
    //Upload (can take up to a max of 10 minutes)
    //Wait for a response (can take up to a max of 10 minutes)
    //Save response to our database (takes a few milliseconds)
}

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

เพื่อให้ฉันคิดว่า: ในโลกที่ฉันสามารถปรับเปลี่ยนโปรแกรมของฉันเพื่อให้ฉันสามารถไฟอีก "ติดตาม" โปรแกรมได้อย่างไร หรือสิ่งนี้ควรเปลี่ยนจากการเป็นโปรแกรมคอนโซลเป็นโปรแกรมWPFที่ถูกซ่อนอยู่หรือไม่?

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

โดยรวมแล้วฉันคิดว่าฉันต้องการเห็นหน้าต่างที่ระบุสิ่งที่ต้องการ: กระบวนการ x ของ y จนถึงตอนนี้กำลังประมวลผลรายการต่อไปนี้ ทำรายการในรายการเช่นตารางและให้พวกเขาพูดเช่น "กำลังอัปโหลด" หรือ "กำลังรอคำตอบ" บางทีถ้าฉันบ้าฉันก็สามารถจัดลำดับของรายการที่ล้มเหลวได้

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


คุณต้องการตรวจสอบความคืบหน้าภายในการดำเนินการอัปโหลด / ตอบกลับ (ใช้เวลา 10 นาที) หรือคุณต้องการทราบว่ามีการอัปโหลดจำนวนเท่าใดภายในวง "Parallel.ForEach"
Doc Brown

@DocBrown ดูการแก้ไข (สองย่อหน้าสุดท้าย)
Robert Snyder

1
ฟังดูเหมือนว่าสิ่งที่คุณต้องการอาจเป็นโปรแกรมรับ UDP แบบง่าย ๆ คุณสามารถวางแพ็กเก็ตสถานะบนเครือข่ายและหากไม่มีสิ่งใดที่นั่นเพื่อรับมัน
Robert Harvey

คำตอบ:


7

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

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


ฉันคิดว่าฉัน giong ที่จะไปกับคำตอบนี้เพราะเราใช้ log4net แล้วดี .. เข้าสู่ระบบ :) ดังนั้นนี้จะพอดีกับสิ่งที่เขามี ฉันไม่มีเงื่อนงำ log4net สามารถทำได้! ขอบคุณ
Robert Snyder

9

จากความคิดเห็นของคุณฉันเห็นว่าคุณมีฐานข้อมูลลูกค้า / เซิร์ฟเวอร์และผู้อัปโหลดมีการเชื่อมต่อและเขียนการเข้าถึงอยู่แล้ว? จากนั้นอาจเป็นวิธีที่ง่ายที่สุดในการเพิ่มตาราง "การตรวจสอบ" หรือ "สถานะ" ลงในฐานข้อมูลและให้ผู้อัปโหลดรายงานความคืบหน้าของมันที่นั่น (บันทึกแต่ละขั้นตอน "น่าสนใจ" ที่นั่นอาจเป็น 5 ขั้นตอน

ในการดูสถานะให้สร้างโปรแกรมที่สองด้วย GUI ซึ่งเชื่อมต่อกับฐานข้อมูลและแสดงสถานะ (ตัวอย่างเช่นโดยการสำรวจในช่วงเวลา 1 นาที) คุณสามารถรันโปรแกรมนั้นบนเดสก์ท็อปท้องถิ่นของคุณโดยสันนิษฐานว่าเป็นไปได้ที่จะเชื่อมต่อกับฐานข้อมูลจากที่นั่น

แน่นอนว่าเมื่อเขียนลงในตารางสถานะจะรบกวนธุรกรรมฐานข้อมูลของคุณคุณอาจใช้การเชื่อมต่อแยกต่างหาก คุณยังสามารถใช้กลไกการจัดคิวข้อความเช่นMSQMได้ด้วย แต่นั่นอาจเป็นวิธีแก้ปัญหาขนาดใหญ่สำหรับกรณีง่าย ๆ ของคุณ


+1 นี่เป็นวิธีที่ดีที่สุดในการทำให้มันง่ายและไม่ยุ่งยากเกินกว่าที่จะไม่ซับซ้อนเกินไป
Thomas Stringer

3

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

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

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

คุณต้องการรวมศูนย์การส่งข้อความหากมีแอปพลิเคชันของคุณทำงานอยู่หลายอินสแตนซ์ หากมีเพียง 1 อินสแตนซ์ให้ใช้ร้านค้าอื่นเช่นบันทึกเหตุการณ์ของ windows หรือไฟล์อาจเพียงพอ

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