2011-01-18 17 views
13

Svcutil kullanarak WCF vekil oluştururken sözleşmeleri buna da veri sözleşmeleri devralan hangi arayüzleri dahil etmek mümkündür:WCF ve arayüzler,

public class SomeType: ISometype 
{ 
    public string Name { get; set; } 
} 

public interface ISometype 
{ 
    public string Name { get; set; } 
} 

Bunu kullanarak proxy oluşturmak, SomeType türü, istemcide oluşturulur, ancak arabirim oluşturulmaz ve hiçbir miras da yoktur. Arabirimi DataContract olarak işaretlemeyi denedim, ancak bu özniteliğe izin verilmiyor.

Yapmaya çalıştığım şeyi yapmak mümkün mü?

cevap

21

WCF tefrika mesajlar kullanıyor ve tüm bu mesajlar DataContractSerializer kullanarak veya Serileştirilecek gerekiyor bir XmlSerializer. Ve istemci ile sunucu arasında giden mesajların XML şemasında ifade edilebilir olması gerekir.

XML şeması, arayüzler hakkında hiçbir şey bilmiyor - somut, gerçek tiplerle ilgili. Müşterilerinizin .NET'ten PHP'ye Ruby'den (her ne olursa olsun) herhangi bir şey olabileceği düzenli bir senaryo için, istemci ve sunucu arasında göndermek istediğiniz her şeyi XML şemasında gösterilebilecek şekilde ifade etmeniz gerekir - arayüzler yapamam. Yani bunu genel bir senaryoda desteklemenin hiçbir yolu yok. Telin her iki ucunu kontrol ediyorsanız, örn. Eğer istemci ve sunucu ve her iki .NET hem yazma, o zaman bunu yapabilirsiniz:

  • tümü ayrı bir MyServiceContracts montaj

  • içine DataContracts (ve ServiceContracts ve OperationContracts ve FaultContracts) koymak

    , hem servis tarafı kodunuzdan hem de istemciden derlemeyi referans alır. Bu durumda, istemci proxy'sini oluşturmaya gittiğinizde, bahsettiğiniz türler zaten mevcut ve WCF bu tür montajdan bu türleri yeniden kullanacak. Ve bu, referans verdiğiniz bir .NET derlemesi olduğundan, .NET'in desteklediği herhangi birşeye sahip olabilirsiniz - arayüzler dahil.

+0

Teşekkürler marc_s Bu yaklaşımı deneyeceğim. – ganeshran

+0

Açıklama marc_s için teşekkürler, ganeshran'ın kendime benzer bir durum olduğunu düşünüyoruz. Hedef, servis yöntemleriyle ISometype'ı sunucuya uygulayan bir foo örneğini geçmek değil; yapmak istediğim, hizmetin tüketicisine somut bağımlılıkları önlemek; Nesnelerin tümünü başka bir katmanda çoğaltmak zorunda kalmadan ve sonsuz haritalamaya (otomatik makasa veya başka bir şekilde) sahip olmak zorunda kalmadan, tükettiğim hizmetin yüzlerce türü ve binlerce özniteliği vardır. – RobD