2009-02-26 34 views
15

Tôi mới tham gia WCF và cố gắng chạy dịch vụ đầu tiên của mình. Tôi gần nhưng bị mắc kẹt về vấn đề này.Dịch vụ WCF - thời gian chạy không thấy ServiceContract trên Giao diện

Trong tập tin định nghĩa giao diện của tôi, tôi có điều này:

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

Sau đó, tôi có tập tin lớp học của tôi (đối với dịch vụ) mà được thừa hưởng nó:

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

Cuối cùng, trong dự án máy chủ của tôi, tôi có điều này:

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

Mọi thứ đều biên soạn và khi máy chủ lưu trữ thêm điểm cuối dịch vụ, nó ombs với điều này: "Loại hợp đồng Inventory.InventoryService không được gán với ServiceContractAttribute. Để xác định hợp đồng hợp lệ, loại được chỉ định (hoặc giao diện hợp đồng hoặc loại dịch vụ) phải được gán với ServiceContractAttribute. "

Tôi biết tôi thiếu một thứ đơn giản ở đây. Tôi có giao diện rõ ràng là hợp đồng dịch vụ và có một tham chiếu đến dự án mà trong dự án chủ

Trả lời

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

Nếu thuộc tính ServiceContract của bạn nằm trên giao diện không phải là lớp bê tông, hãy thử như sau:.

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

Khi tôi cố gắng mà nó mang lại cho tôi những ArgumentException, "chỉ hỗ trợ ServiceHost Các loại dịch vụ lớp. " –

+0

Đã chuyển đổi sai" - thay đổi lệnh gọi AddServiceEndpoint thành giao diện, giữ ServiceHost thành lớp. – Brian

+0

OK! Vì vậy, tôi đang instantiating ServiceHost, đi qua trong lớp bê tông, nhưng tôi xác định điểm cuối, hoặc ràng buộc, với giao diện, mà thực sự là định nghĩa hợp đồng (tức là không phải lớp). Cuối cùng tôi sẽ nhận được điều này. Cảm ơn Brian và Andrew. –

Các vấn đề liên quan