การโฮสต์แอปพลิเคชันเว็บ ASP.NET5 ในบริการ Windows

ฉันมีแอปพลิเคชันบริการ Windows ที่มีอยู่ซึ่งใช้ .NET Framework 4.5 และต้องการเพิ่มอินเทอร์เฟซผู้ใช้สำหรับการกำหนดค่าและการวินิจฉัย

ใน Windows Forms หรือ WPF บริการจะส่งข้อมูลผ่านการเชื่อมต่อ TCP (.NET Remoting หรือ WCF) ไปยังไคลเอนต์ แต่จะต้องมีการกำหนดค่าเพิ่มเติมทั้งบนไคลเอนต์หรือฝั่งเซิร์ฟเวอร์และยังต้องการบริการและไคลเอนต์ให้เหมือนกัน ระดับความเข้ากันได้ ซึ่งในกรณีที่เลวร้ายที่สุดหมายถึงลูกค้าหลายรายสำหรับบริการที่หลากหลาย

ฉันมีแนวคิดที่จะรวมบริการและอินเทอร์เฟซผู้ใช้เข้าด้วยกันในแอปพลิเคชันเดียวโดยใช้ ASP.NET5 Web Application ใหม่ เมื่อบริการ Windows เริ่มต้น อันดับแรกฉันต้องการเริ่มต้นเว็บเซิร์ฟเวอร์ จากนั้นจึงเริ่มบริการที่เหลือ ดังนั้นจึงเป็นไปได้ที่ผู้ใช้จะโต้ตอบกับบริการโดยไม่ต้องติดตั้งซอฟต์แวร์เพิ่มเติมใดๆ เว็บแอปพลิเคชันและบริการ Windows ควรทำงานใน AppDomain เดียวกัน เพื่อให้ฉันสามารถเปลี่ยนออบเจ็กต์ในส่วนติดต่อผู้ใช้และบริการสามารถใช้งานได้ทันที

จนถึงตอนนี้ ฉันเล่นกับ Console Application ใหม่ (dnx451) มาบ้างแล้วและโฮสต์ผ่าน WebHostBuilder และมีเพจที่ใช้งานได้ แต่ฉันไม่คิดว่านั่นเป็นวิธีแก้ปัญหาที่ฉันกำลังมองหา ฉันได้รับผลลัพธ์ของโครงการและไฟล์ cmd เพื่อเริ่มเซิร์ฟเวอร์

ดังนั้นคำถามแรกของฉันคือ: มีการใช้งาน WebHostBuilder สำหรับ .NET 4.5 ที่เทียบเท่าเพื่อรันเว็บไซต์ในโครงการ Visual Studio แบบดั้งเดิมหรือไม่

ความคิดที่สองของฉันคือการเรียกใช้บริการภายใน IIS โดยสมบูรณ์ ดังนั้นฉันจึงมีเว็บเพจที่โฮสต์ฟังก์ชันการทำงานของบริการที่มีอยู่ แต่ฉันไม่ทราบถึงความแตกต่างระหว่างแอปพลิเคชันใน IIS และบริการ Windows แล้ว ASP.NET 4.6 ในกรณีนี้ล่ะ? เพราะฉันคิดว่าฉันจะต้องแปลงไลบรารีที่มีอยู่ให้เป็นไลบรารีคลาส ASP.NET5 ใหม่ (แพ็คเกจ)

ความเป็นไปได้สุดท้ายที่ฉันคิดได้คือการเผยแพร่เว็บแอปพลิเคชันไปยัง IIS และบริการเป็นบริการ Windows และสื่อสารผ่าน WCF NamedPipes เช่นเดียวกับที่ฉันทำกับแอปพลิเคชัน WPF หรือ Windows Forms

สรุปว่ามีแผนอะไรที่จะสนับสนุนแนวคิดแรกของฉันหรือฉันต้องเลือกอย่างใดอย่างหนึ่ง และตัวเลือกไหนน่าจะดีที่สุด?


person dwonisch    schedule 31.07.2015    source แหล่งที่มา


คำตอบ (3)


สำหรับ .NET 4.5 ตัวเลือกของคุณคือ WebAPI 2.2 หรือ NancyFX ทั้งคู่ทำงานบน Microsoft.Owin.SelfHost น่าเสียดายที่คุณไม่สามารถโฮสต์ MVC 5 ด้วยตนเองได้

สำหรับ ASP.NET 5 w/ MVC 6 คุณโชคไม่ดี เนื่องจาก เท่านั้น ทำงานบน DNX (ดูการขึ้นต่อกันในแพ็คเกจ MVC6 nuget พวกมันมีการอ้างอิงสำหรับ DNX และ DNXCore เท่านั้น) และไม่มี bootstraper บริการ windows สำหรับ DNX นอกจากนี้ การปรับใช้ .NET 4.6 ในการใช้งานจริง ไม่ใช่ความคิดที่ดี ( ยัง).

person m0sa♦    schedule 06.08.2015

คุณสามารถรัน ASP.NET 5 ด้วย .NET 4.5.1 โดยใช้ DNX451 (ไม่ใช่ DNX Core) และโฮสต์ทั้งหมดโดยใช้บริการ Windows ฉันได้เขียนวิธีการทำสิ่งนี้ที่นี่: http://taskmatics.com/blog/host-asp-net-in-a-windows-service/

person Erez T    schedule 28.08.2015

หากคุณต้องการให้บริการของคุณสามารถใช้งานได้จากโลกภายนอก ซึ่งฉันถือว่าเป็นจริง ฉันคิดว่าแบบฟอร์มนั้นจำเป็นต้องโฮสต์ใน ASP.NET ซึ่งทำงานภายในบริการ IIS

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

person David A. Gray    schedule 31.07.2015