第一個 WCF項目 與 Ajax

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   使用   

WCF(Windows Communication Foundation)是作為.Net framework 3.0發布的,所以只有2008及其以上的版本才可以建立wcf應用程式

WCF是對現有分布式通訊技術的整合,其中包括Com/DCom、.Net Remoting、Web服務及其WSE(web服務的升級版本)、MSMQ。

現在決定 學習WCF ,所以在部落格園裡參考 http://www.cnblogs.com/jiagoushi/archive/2013/03/15/2962351.html  親手練習了一番

1.建立wcf的項目。我們按照在項目中會實際用到的項目結構來組織。

我來解釋一下這些項目的結構。

  1. ConsoleHosting 是一個控制台應用程式,用來承載Wcf服務。你會說什麼叫承載?說白了就是可以訪問到wcf服務,因為建立了一個wcf應用程式,就相當於一台機器人,但是不給他電池,他就沒辦法走路,承載就相當於給他動力,他就可以運行。wcf的承載方式可以分為自承載(Self Hosting) 和IIS承載(在IIS中 通過像訪問web網站一樣訪問)。
  2. Contracts 項目是一個類庫項目,他是用來存放wcf的契約,就是一些介面
  3. Services也是一個類庫項目,他是用來存放實現了契約的服務,就是一些實現了介面的類
  4. WebClient 是一個web項目,採用的是MVC 4.用來作為調用wcf服務的用戶端存在。
  5. WebHosting 是一個web項目,採用的是MVC4,用來作為承載wcf服務。可能你會說有兩個承載wcf的項目,多餘,是的,我在這裡的目的就是為了說明,wcf可以有多種承載方式。

首先在Contracts 項目中添加一個介面,然後添加兩個計算數值的方法。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.ServiceModel;namespace Contracts{    /*        契約類     */        // 定義WCF服務合約    [ServiceContract(Name="ICal",Namespace ="http://www.Chinaer.com")]    public interface ICal    {        [OperationContract]        int add (int x, int y);        int Sub (int x, int y);    }}

注意:在方法中Add上面有OperationContract 操作契約,但是在Sub方法上沒有添加這個Attribute。

在服務類中實現這個契約,在Services中添加一個類,實現這個介面。

using Contracts;using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Services{    /*        服務類     */    public class CalServices:ICal    {        public int add (int x, int y)        {            int num = x + y;            return num;        }        public int Sub (int x, int y)        {            return x - y;        }    }}

實現了服務類,下面就需要承載wcf服務,這個wcf相對比較簡單,沒有使用設定檔,通過編程方式來承載。當然我們一般在實際項目中不推薦這麼做。

首先通過Console 控制台承載,其實控制台承載和Web承載的編程代碼是一樣的,只是項目類型不同而已。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.ServiceModel;using System.ServiceModel.Description;using Contracts;using Services;namespace ConsoleHosting{    class Program    {        static void Main (string[] args)        {            using( ServiceHost host = new ServiceHost(typeof(CalServices), new Uri("http://127.0.0.1:8081")) )             {                //  ServiceEndPoint 總結點 包含 Address 地址  Bingding 綁定  Contract 契約 簡稱ABC                host.AddServiceEndpoint(typeof(ICal), new WSHttpBinding(), "calService");                                // 添加服務總結點                if( host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null )                 {                    // 判斷是否在設定檔中定義了元素總結點                    ServiceMetadataBehavior metadata = new ServiceMetadataBehavior();                    metadata.HttpGetEnabled = true;                    metadata.HttpGetUrl = new Uri("http://127.0.0.1:8081/CalService/MetaData");                                        // 添加中繼資料總結點                    host.Description.Behaviors.Add(metadata);                }                host.Opened += delegate { Console.WriteLine("WCF已經啟動,請按任意鍵結束!!"); };                if( host.State != CommunicationState.Opened )                 {                    host.Open();                }                Console.Read();            }        }    }}

添加了宿主以後就可以通過瀏覽器查看服務中繼資料。要查看中繼資料,首先要啟動控制台程式。

在瀏覽器中輸入服務中繼資料地址 就可以訪問到中繼資料,如果代碼正確可以看到如下結果。

出現了上面的中繼資料結果,就表示wcf是可以正常調用的。wcf服務是通過中繼資料的方式對外發布的,ServiceMedataBehavior是中繼資料發佈的Behavior。

既然服務已經發布成功,那麼我們就在用戶端調用看是否可以得到結果。

 

可以看到調用wcf服務成功。我把在MVC中的一些簡單處理介紹一下。

首先我在HomeController中添加了一個Add方法(這裡會根據請求的方式來調用對應的方法)用來調用Wcf服務

        [HttpPost]        public ActionResult Add (string first,string second)        {            CalServices client = new CalServices();            int number = client.add(Convert.ToInt32(first),Convert.ToInt32(second));            return Json(number,JsonRequestBehavior.AllowGet);        }        [HttpGet]        public int Add ()        {            return 0;        }

介面的布局和 使用Ajax的使用

 效果如下(樣式就沒有貼出來了)

首頁面

這樣,我們的一個簡單的訪問wcf的程式就完成了。wcf的範圍很廣,以後我們一起來交流。如果要下載源碼 :http://pan.baidu.com/share/link?shareid=458336&uk=1610729480

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.