2015-12-08 18 views
9

İki farklı sunucuda barındırılması gereken bir ASP.NET MVC projesi var. Bunun garip geldiğini biliyorum, ama bu müşterimden gelen şart.İki fiziksel sunucuda ASP.NET MVC projesini barındırma

ayrıntılarında, ben sahip olacak 2 yük dengeli sunucular

  • Web Sunucusu-
  • Uygulama Sunucusu (bu sunucusunun genel ip işaret edecek etki) Kamu maruz - iç iletişim altyapıları (Active Directory, Veritabanı, Güvenlik, vb)

Simple diagram

Başka bir katman oluşturmayı düşünüyorum (ASP.NET Web API), böylece web sunucusu yalnızca HTML sayfalarını sunacaktır, uygulama sunucusu iş mantığını içerecek ve tüm istemciler için uç noktaları (web, mobil) gösterecektir. aramak. Web Sunucusu, RESTFUL servisleri aracılığıyla App Server ile iletişim kuracaktır.

Yapmanın daha iyi bir yolu var mı? Herhangi bir çözüm büyük ölçüde takdir edilecektir. Bu şeyler yapmanın oldukça normal bir yoldur

cevap

5

önceden

Teşekkürler, - web sunucuları sayfalarını hizmet konsantre izin vermedi ve arka uç sunucuları, uygulama iş mantığı ile zor işi yapalım. Büyük bir veri çıkışı ile yoğun bir şekilde kullanılıyorsa, ayrı bir web, uygulama ve veritabanı sunucuları ile üç katman yapmayı düşünürdüm.

Web API, iki sunucu arasındaki iletişim için oldukça iyi bir seçimdir, ancak temel REST işlemlerinin ötesine geçmeniz gerektiğinde WCF'yi bir alternatif olarak düşünmeye değer olabilir. Yine de koşmak için daha büyük bir yük var, ve kesinlikle soluk yürekli için değil!

DÜZENLEME

Yani tek yapmanız gerekenler aşağıda mevcut kontrolörleri dışına ve ikinci sunucuda oturup Web API kontrolörleri karşılık gelen bir dizi haline tüm geçerli iş mantığını taşımaktır. Dikkatli olmanız durumunda, MVC denetleyici yöntemlerinizi doğrudan Web API denetleyicilerinize kopyalamanız ve uygun yönlendirme özelliklerini ekleyebilmeniz gerekir. Veritabanınız (eğer varsa) ikinci sunucuda da oturmalıdır.

Bunu yaptıktan sonra, tüm MVC denetleyicilerinizin yapacağınız, ikinci sunucuda çalışan Web API'sine çağrı yapmaktır. MVC denetleyicileri, verilerinizi güzel görünmesini sağlamak için verilerinizin üzerinde herhangi bir işlem yapmamaları gerekir (denetleyicilerinizin temiz tutulması iyi bir uygulama olsa da).

Bu, yapmanız gereken şey hakkında temel bir fikir vermelidir. Adımlardan herhangi biriyle ilgili daha spesifik bir şeye ihtiyacınız varsa, sadece bağırın ve ayrıntılı bir şekilde çalışıp çalışamayacağımı görelim.

+0

Bu mimarinin avantajını anlıyorum, ancak bu durumda ASP.NET MVC çalışmayacaktır (görünüm ve denetleyiciler sıkı bir şekilde birleştirilmiştir). MVC projesini her şeyi değiştirmeden ayırmak zaten var mı? –

+1

Ah, şimdi ne yapmaya çalıştığını görüyorum. Hayır, mevcut bir MVC projesini alamazsınız ve bunları, denetleyicilerin ve görüşlerin sıkı bir şekilde eşleştirildiğini söylediğiniz gibi bölüştüremezsiniz. Cevabımı daha ayrıntılı bir açıklama ile güncelleyeceğim, ancak evet, iş mantığınızı MVC denetleyicilerinizden almanız gerekecek. – Mourndark

+0

MVC denetleyicilerinden webapi denetleyicilerine çağrı yaptığımda, dahili arama veya web servis çağrısı yapmalı mıyım? Form kimlik doğrulamasında da sıkıntı yaşıyorum çünkü geçerli kimlik doğrulama mantığı MVC katmanında yazılıyor, WebAPI Katmanı'na taşımak için çok çaba harcanıyor. Üstelik, yeniden deneme mantığının yanı sıra, daha sağlam hale getirmek için API'yi (yalnızca güvenilir uygulamanın bağlanmasına izin ver) güvenli hale getirmem gerekiyor. Bir fikri var mı? Teşekkürler –

4

Projemizde benzer bir yapı kullanıyoruz. Bir hizmet katmanı, birden fazla web sitesi ve mobil uygulama tarafından tüketilmekte olan REST API'lerini açığa çıkarır. Bu mimarinin güzelliği, tüm iş karmaşıklıklarının API'ların ardında gizli kalması, ön uçun ise çoğunlukla sunum ihtiyaçları ile ilgilenmesidir.

Ama iki şey konusunda dikkatli olmak gerekir iken bu mimariyi geliştirme: bitiş noktalarını (DİNLENME API) korunması

1. - size daha sonra API'leri tüketir mobil uygulamalar geliştirmek planlıyorsanız uç noktaları güvenlik duvarı üzerinden ortaya çıkarılmalı ve internete erişilebilir hale getirilmelidir. Seçeneklerden biri, isteği doğrulamak için bir taşıyıcı jetonu doğrulama kullanmaktır. Uç noktaları güvenli hale getirmek için Oauth protokolünü kullanabilirsiniz. Dizgeleştirme ve deserializing üzerinde

2. Zorluk: DİNLENME veri aktarımı standart bir biçimi olarak JSON kullanır ve Json kesinlikle yazılı değildir beri meydan her iki uçta da uygun modellere harita verilerini etmektir. Bunu çözmek için modeller için ortak bir proje oluşturduk ve (api ve web) projelerine ekledik. API sonunda bir modele serpiştirdik, web modelinde aynı modele çektik. Onlar hıçkırık olmadan mükemmel bir şekilde haritalandırdılar.

Yukarıdaki ipuçları size yardımcı olacaktır umuyoruz.