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
bunun beni verdiğini deneyin ArgumentException, "ServiceHost sadece destek s sınıfı hizmet türleri. " –
Yanlış olanı değiştir - AddServiceEndpoint aramasını arabirime dönüştür, ServiceHost'u sınıf olarak tut. – Brian
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. –