MarshalByRefObject'in başlıca kullanımı nedir?


Yanıtlar:


109

Uzaklaştırma; Bu, AppDomains veya makineler arasında nesneyi serileştirmek ve aktarmak yerine nesnenin bir uçta kaldığı ve diğerinde bir proxy oluşturulduğu anlamına gelir. Proxy'ye yapılan tüm yöntem çağrıları engellenir ve çağrı , yöntemin diğer makinede yürütülmesine neden olarak RPC wiki , msdn olarak iletilir (tipik olarak bağımsız değişkenleri ve dönüş değerini serileştirir).

Not: Bu, beklenmedik şekilde "konuşkan" arayüzlere yol açabilir. Nesne / proxy / RPC yaklaşımı, artık açık bir hizmet sınırı olan yaklaşımlara göre daha az tercih edilmektedir ; Microsoft artık remoting yerine WCF wiki , msdn'yi önermektedir .


5
@pavel - oldukça karmaşık, ancak en azından pahalı aramaların nerede olduğu bize açık. Bant genişliğini kastediyorsanız , bunu azaltmanın yolları vardır.
Marc Gravell

1
Bazen yok istediğiniz böyle için listelenen senaryolarda olduğu gibi açık sınırları, processdomain.codeplex.com Bunun yerine şeffaflık istiyoruz.
Andrew Savinykh

1
c # 'da tüm referans türleri referans olarak varsayılan olarak veya nasıl bilindiği için sıralıdır, saçma bir soruysa soory, bu konsept ile sadece yeni @MarcGravell
Ehsan Sajjad

1
@Ehsan hayır, onlar varsayılan olarak mareşaldir. Sıralama yalnızca uygulama alanı sınırlarını geçerken geçerlidir, bu nedenle alakalı bile olması nadirdir. Hakemlik yapmak için MashalByRefObject'i miras alması gerekir
Marc Gravell

28

Bir diğer önemli kullanım, MarshalByRefObjectAOP'nin havuz zincirlerinin uzaklaşması yoluyla uygulanmasıdır.

ContextBoundObjectKendisinden türetilen (kendisinden türetilen MarshalByRefObject) bir nesneniz varsa, onu aynı AppDomain içinde ayrı bir Bağlamda başlatabilir ve nesneler arasındaki iletişimin otomatik olarak Uzak proxy sisteminden geçmesini sağlayarak özel havuzları Uzak havuza takmanıza olanak tanır. Zincir.

Bu, sonuçta, nesnelerinize yönelik yöntem çağrılarını 'dekore etmenize' ve günlük kaydı ve güvenlik vb.


Sadece bunları düşünüyorum -Böyle yöntem çağrılarını MBR nesnelerine nasıl dekore edebiliriz? Bu süslemeler performans açısından maliyetli olacak mı?
SO19

9

Temel kullanım, iki uygulama alanı arasındaki nesnelere erişimi desteklemek içindir ve bu uygulama alanları aynı bilgisayarda veya uzaktan erişim yoluyla farklı bilgisayarlarda olabilir.

Buraya Bakın


5

Çağıran uygulamanın uygulama etki alanı dışındaki herhangi bir nesne Uzak Nesne olarak düşünülmelidir. Sınıftan türetilmesi gereken bir Uzak Nesne MarshalByRefObject. Herhangi bir nesne türetilerek Uzak Nesneye dönüştürülebilir MarshalByRefObject. Devralan olmadan Nesneleri MarshalByRefObjectdenir Olmayan Kumandalı nesneler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.