2009-02-26 23 views
15

WCF'de yeni ve ilk servisimi çalıştırmaya çalışıyorum. Ben yakınım ama bu sorun üzerinde sıkışmış. Benim arayüz tanım dosyasındaWCF Service - Arayüzde ServiceContract'ı göremeden çalışma zamanı

, bu var: o devralır

Sonra
[ServiceContract(Namespace="http://mysite.com/wcfservices/2009/02")]  
    public interface IInventoryService 
    { 
     [OperationContract] 
     string GetInventoryName(int InventoryID); 
    } 

I (hizmet için) benim sınıf dosyası var: my Sunucu projesinde,

public class InventoryService : IInventoryService 
    { 
     // This method is exposed to the wcf service 
     public string GetInventoryName(int InventoryID) 
     { 
      return "White Paper"; 
     } 

Sonunda

ServiceHost host = new ServiceHost(typeof(Inventory.InventoryService)); 
    host.AddServiceEndpoint(typeof(Inventory.InventoryService), new NetTcpBinding(), 
     "net.tcp://localhost:9000/GetInventory"); 
    host.Open(); 

Her şey iyi derler ve konak b it hizmet bitiş noktası eklemek için gittiğinde: bu var bununla birlikte: "Sözleşme türü Envanter.InventoryService ServiceContractAttribute ile ilişkilendirilmez. Geçerli bir sözleşmeyi tanımlamak için, belirtilen tür (sözleşme arabirimi veya hizmet sınıfı) ServiceContractAttribute ile ilişkilendirilmelidir. "

Burada basit bir şeyi kaçırdığımı biliyorum. Arayüzü açıkça bir hizmet sözleşmesi olarak işaretliyim. ve Host projede bu proje için bir gönderme var senin ServiceContract nitelik Arabirimi değil beton sınıfı açıksa

cevap

25
ServiceHost host = new ServiceHost(typeof(Inventory.InventoryService)); 
host.AddServiceEndpoint(typeof(Inventory.InventoryService), new NetTcpBinding(), 
    "net.tcp://localhost:9000/GetInventory"); 
host.Open(); 

, aşağıdakileri deneyin:.

ServiceHost host = new ServiceHost(typeof(Inventory.InventoryService)); 
host.AddServiceEndpoint(typeof(Inventory.IInventoryService), new NetTcpBinding(), 
    "net.tcp://localhost:9000/GetInventory"); 
host.Open(); 
+0

bunun beni verdiğini deneyin ArgumentException, "ServiceHost sadece destek s sınıfı hizmet türleri. " –

+0

Yanlış olanı değiştir - AddServiceEndpoint aramasını arabirime dönüştür, ServiceHost'u sınıf olarak tut. – Brian

+0

Anladım! Bu yüzden, ServiceHost'u somut sınıfta geçiriyorum, ama son noktayı veya bağlayıcıyı, gerçekten sözleşme tanımı olan (yani, sınıf değil) arayüzle tanımlarım. Sonunda bunun asılmasını sağlayacağım. Teşekkürler Brian ve Andrew. –