2011-03-08 16 views
5

Bunun yaygın bir sorun olduğundan eminim. Temel olarak standart erişim ve yönetici erişimini daha büyük bir servise maruz bırakan iki WCF servisim var.Bir WCF hizmetinden dönüştürme türü

Her hizmette benzer bir yöntem Foo var. Foo, hizmetimde tanımlanan TemplateInfo türünde bir argüman alır.

İstemcimde Client ve AdminClient başvurularım var. Client.Foo(TemplateInfo), AdminClient.Foo(TemplateInfo)AdminClient.TemplateInfo ürününü beklerken Client.TemplateInfo bekleniyor. Servis Client.TemplateInfo ulaşıldığında ve AdminClient.TemplateInfo aynı şey olduğunu biliyorum.

TemplateInfo örneğini nasıl oluşturacağımı anlamaya çalışıyorum ve/veya hem istemci hem de yönetici yöntemleri ile çalışacak şekilde yayınlamaya çalışıyorum. Bu nesneyi oluşturmak için yeterli miktarda kod var, bu yüzden her tür için kopyalamamayı umuyordum.

Türler, paylaşılan derlemelerde tanımlanır ve ben proxy'imde "Türleri yeniden kullanıyorum". Ama iki farklı türü aldım çünkü iki servis referansım var.

(AdminClient) TemplateInfo gibi bir şey yapmak harika olurdu, ancak belki türleri dönüştürmek için bir klon yöntemi oluşturacağım.

cevap

4

Bunu yapmanın bir yolu yok. Onlar farklı tipler.

Bu tür, hem hizmet hem de istemci tarafından başvurulan bir sınıf kitaplığına koyabilirsiniz. Türleri yeniden kullanmak için "Hizmet Referansı Ekle" diyebilirsiniz (varsayılan değerdir) ve sonra kullanılan sınıf kitaplığından tür olacaktır.

İstemci uygulamasının aynı zamanda iki hizmetle aynı sınıf kitaplığına başvurması gerekeceğini unutmayın.

+0

Teşekkürler, bu son not benim senaryoda anahtardır. Zaten iki hizmete başvuruyorum. – earthling

+0

@John, burada yardım edebilir misiniz? Http://stackoverflow.com/questions/43506726/wcf-deserializing-choosing-type-in-depends-on-some-field-once-and-for-all-de lütfen? –

1

tam bir hizmeti başvuru oluşturmak Ya yerine, istemci ve hizmet arasında paylaşılan bir mecliste hizmet türlerini koymak ve istemci sınıfını oluştururken böyle "Yeniden başvurulan meclislerinde türleri" falan bakabilirsin.

1

Bunu yapabilirsiniz, ancak genellikle iyi bir fikir olarak kabul edilmez. Bunun nedeni, müşterinizi ve hizmetlerinizi sıkı sıkıya birleştirmektir. Yalnızca, müşterinin ve her iki hizmetin kontrolündeyseniz bunu yapmayı düşünün ve servislerden birine bir değişiklik yaptığınızda müşteriyi kırabileceğinize hazırsınız.

Richard, görsel stüdyosu kullanıyorsanız bunu nasıl yapacağınızla ilgili bazı ipuçlarıyla beni dövdü. Servis odaklı mimari ana ilkelerinden

Bir

Ama

"Hizmetler payı şema ve sözleşme değil, sınıf" dir.

Bunu daha iyi açıklayan pek çok iyi makale var. Vikipedi, iyi bir başlangıç ​​ya da WCF'nin harika bir ismi olduğunda bu yazı geri döndü. http://msdn.microsoft.com/en-us/magazine/cc164026.aspx

+0

Anladım. Bu, iki servisle aynı çözümdeki bazı fonksiyonel testler içindir.Servisler arasında benzer işlevselliği sağlamak için servis seviyesinde yapmam gereken bazı değişiklikler olacağını düşünüyorum. – earthling

İlgili konular