WCF筆記(1)初識WCF簡單應用

一、建立一個服務端項目

1、添加“System.ServiceModel”引用。

2、定義服務協定

 [ServiceContract(Name="MyService")]
    public interface IService
    {        
        [OperationContract]
        string TestMethod();
        [OperationContract (Name="SecondMethod")]
        int Add(int a, int b);
    }

3、定義一個類實現服務協定

 public class MyService : IService
    {
        public string TestMethod()
        {
            return "這是一個測試方法";
        }
        public int Add(int a, int b)
        {
            return a + b;
        }
    }
4、在Main入口點中定義服務器相關的參數,並啓動服務

 static void Main(string[] args)
        {
            Uri baseUri = new Uri("http://localhost:8000/Service");
            using(ServiceHost serverHost=new ServiceHost(typeof(MyService),baseUri))
            {
                //向服務器添終結點
                WSHttpBinding httpBinding = new WSHttpBinding();
                //這裏不需要安全驗證
                httpBinding.Security.Mode = SecurityMode.None;
                serverHost.AddServiceEndpoint(typeof(IService), httpBinding, "my");
                //爲了能讓VS生成客戶端代碼,即WSDL文檔,故要添加以下行爲  
                ServiceMetadataBehavior mdBehavior = new ServiceMetadataBehavior
                {
                   HttpGetEnabled=true
                };
                serverHost.Description.Behaviors.Add(mdBehavior);

                //如果服務順利啓動,則提示,處理Opened事件  
                serverHost.Opened += (sender, e) => Console.WriteLine("服務已啓動");

                //啓動服務
                try
                {
                    serverHost.Open();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                // 爲了讓程序不往下執行而結束,故加上這句  
                Console.ReadKey();
                // 關閉服務器  
                serverHost.Close();  
            }
        }        
這樣服務端就做好了。

二、建立客戶端
1、建立一個客戶端並添加服務引用,就是剛纔建好的服務(使用其基地址),要保證服務處於打開狀態才能成功添加服務引用。
2、服務添加成功後,我們就可以在客戶端程序裏面進行調用了。

三、多服務協定

1、定義多個服務協定

    /// <summary>
    /// 第一個服務協定
    /// </summary>
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        string SayHelloA(); 
    }

    /// <summary>
    /// 第二個服務協定
    /// </summary>
    [ServiceContract]
    public interface IService2
    {
        [OperationContract]
        string SayHelloB();
    }

    /// <summary>
    /// 第三個服務協定
    /// </summary>
    [ServiceContract]
    public interface IService3
    {
        [OperationContract]
        string SayHelloC();
    }
2、實現多個服務協定,並啓動服務

 /// <summary>
    /// 實現多個服務協定
    /// </summary>
    public class MultiServices:IService1,IService2,IService3 
    {
        //在Main函數中啓動服務
        static void Main(string [] args)
        {
            using (ServiceHost host = new ServiceHost(typeof(MultiServices), new Uri("http://localhost:8002/Service")))
            {
                WSHttpBinding binding = new WSHttpBinding();
                binding.Name = "myBinding";
                binding.Security.Mode = SecurityMode.None;
                //對每一個協定添加終結點
                host.AddServiceEndpoint(typeof(IService1), binding, "mySv1");
                host.AddServiceEndpoint(typeof(IService2), binding, "mySv2");
                host.AddServiceEndpoint(typeof(IService3), binding, "mySv3");
                ServiceMetadataBehavior behavior = new ServiceMetadataBehavior { HttpGetEnabled = true };
                host.Description.Behaviors.Add(behavior);
                host.Opened += (sender,e) => Console.WriteLine("服務已啓動");
                try
                {
                    host.Open();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                Console.ReadKey();
                host.Close();
            }
        }
        public string SayHelloA()
        {
            return "你好,這是第一個服務協定";
        }

        public string SayHelloB()
        {
            return "你好,這是第二個服務協定";
        }

        public string SayHelloC()
        {
            return "你好,這是第三個服務協定";
        }
    }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章