سؤال

أنا جديد على WCF ومحاولة الحصول على الخدمة الأولى الخاصة بي. أنا قريب ولكن عالق في هذه المشكلة.

في ملف تعريف الواجهة، لدي هذا:

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

ثم لدي ملف صفي (للخدمة) التي ترثها:

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

أخيرا، في مشروعي المضيف لدي هذا:

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

كل شيء يتجمع بشكل جيد، وعندما يذهب المضيف إلى إضافة نقطة نهاية الخدمة، فإنها قصفت مع هذا: "لا يعزى مخزون نوع العقد.InventoryService مع Servicecontractactattribute. من أجل تحديد عقد صالح، النوع المحدد (إما واجهة العقد أو الخدمة يجب أن يعزى الطبقة) مع Servicecontracttribute. "

أعلم أنني أفتقد شيئا بسيطا هنا. لدي الواجهة بوضوح بمثابة عقد خدمة وهناك إشارة إلى هذا المشروع في المشروع المضيف.

هل كانت مفيدة؟

المحلول

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

إذا كانت سمة ServiceConact الخاصة بك موجودة على الواجهة ليست الفئة الملموسة، فجرب ما يلي:

ServiceHost host = new ServiceHost(typeof(Inventory.InventoryService));
host.AddServiceEndpoint(typeof(Inventory.IInventoryService), new NetTcpBinding(),
    "net.tcp://localhost:9000/GetInventory");
host.Open();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top