中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

WCF服務庫及其托管-VS2010版

發布時間:2020-07-15 23:22:18 來源:網絡 閱讀:1432 作者:逸澤 欄目:編程語言

 

類庫只是類的集合,不能單獨運行。

WCF服務程序項目是可以直接托管執行的,svc文件屬于WCF服務的特定文件擴展名,IIS里有對應的處理程序。

WCF服務程序可以直接IIS里托管即可,WCF類庫需要一個程序來引用并托管它。


1、創建WCF服務庫項目

WCF服務庫及其托管-VS2010版

在解決方案中會自動生成了兩個類文件“IService.cs”“Service.cs”

WCF服務庫及其托管-VS2010版

這兩個類文件是兩個WCF示例文件,對我們開發沒有什么用處,現在我們刪掉這兩個文件。

WCF服務庫及其托管-VS2010版

WCF服務庫及其托管-VS2010版

Student.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

using System.Runtime.Serialization;

 

namespace WcfServiceLibrary1

{

    /// DataContract數據約定Person就是傳遞的消息中的內容好比信中的文字

    /// 為了保證此類在WCF調用中能夠被序列化我們在Person類上面加入[DataContract]標簽在每個需要序列化的成員變量上加入[DataMember]標簽

    /// 這兩個標簽在使用的進候需要導入using System.Runtime.Serialization命名空間

    [DataContract]

    public class Student

    {

        [DataMember]

        public string Id;

 

        [DataMember]

        public string Name;

 

        [DataMember]

        public int Age;

 

        [DataMember]

        public int Sex;

    }

}

 

 

創建服務接口,聲明對外發布的類和方法。

IStudentService.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.ServiceModel;

 

namespace WcfServiceLibrary1

{

  

    /// <summary>

    /// ServiceContract服務約定代表我們所能操作的接口集合提供功能點

    /// IStudentService接口上面我們定義了[ServiceContract]標簽此標簽代表此接口及實現此接口的類都是對外發布的Service

    /// 在每個需要對外發布的方法上都加上[OperationContract]標簽以使外部可以訪問到此方法

    /// [ServiceContract][OperationContract]這兩個標簽需要導入using System.ServiceModel命名空間

    /// </summary>

    [ServiceContract]

    public interface IStudentService

    {

        /// <summary>

        /// OperationContract 操作約定定義每個操作的接口點方法

        /// </summary>

        /// <param name="person">要添加的學生實體</param>

        [OperationContract]

        void AddStudent(Student person);

 

        [OperationContract]

        List<Student> GetAllStudents();

 

        [OperationContract]

        void RemoveStudent(string id);

    }

 

}

 

實現我們上面聲明的服務接口,實現對Student的添加、刪除和檢索的具體功能。

StudentService.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.ServiceModel;

 

namespace WcfServiceLibrary1

{

 

    /// <summary>

    /// 此類是對IStudentService接口的具體實現在此類的上面我們聲明了[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]標簽

    /// 此標簽代表這個類采用SingleTone單類模式來生成對象

    /// 使用[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]接口需要導入using System.ServiceModel;命名空間

    /// </summary>

    [ServiceBehavior(InstanceContextMode= InstanceContextMode.Single)]

    public class StudentService : IStudentService

    {

        List<Student> _Student = new List<Student>();

        public void Addstudent(Student student)

        {

            student.Id = Guid.NewGuid().ToString();

            _Student.Add(student);

        }

 

        public List<Student> GetAllstudents()

        {

            return_Student;

        }

 

        public void Removestudent(string id)

        {

            //拉姆達語句謂詞 p.Id == id

            Studentstudent = _Student.Find(p => p.Id == id);

 

            _Student.Remove(student);

        }

    }

 

}

 

編譯一下

2配置服務運行

到目前為至,我們建立好了WCF服務,那我們如何讓WCFSVCHost(WCF服務主機)理解我們編寫的服務類,并能夠運行我們編寫的服務呢。這需要我們在App.Config里面注冊一下我們的WCF服務。

VS為我們提供了可視化的操作界面。 
Services項目中右擊“App.Config”配置文件,在彈出的右鍵菜單中選擇編輯WCF配置

WCF服務庫及其托管-VS2010版

 

打開之后

WCF服務庫及其托管-VS2010版

在此界面中暴露兩個對外的終結點(外部可以訪問到的類或接口),其中下面一個是元數據終結點,用來向外提供服務信息的終結點。

而另一個(即上面的終結點),是向外公布我們編寫的[ServiceContract]的類,但我們可以看到它的Contract還是我們在第一步中刪掉的WcfServiceLibrary1.IService1這個終結點。

不僅如此,在右側上面的黑字的服務中還依舊是我們在第一步中刪除的WcfServiceLibrary1.Service1服務。這說明雖然在第一步中我們刪除了那兩個自動生成的類文件,但配置文件中仍沒有刪除這兩個類文件的配置信息。

下面我們把它們改變一下。

單擊左側的服務”-“WcfServiceLibrary1.Service1”在右側的Name,彈出服務類型瀏覽器對話框,在此類型中我們找到此WCF服務項目編譯出來的WcfServiceLibrary1.dll文件,雙擊它就可以出現此服務中的對外公布的服務,點擊選中它單擊確定。

WCF服務庫及其托管-VS2010版

這樣我們就可以把對外公司的服務改變為我們剛編寫的服務了。 
然后,我們展開左側服務”->“WcfServiceLibrary1.StudentService”->“終結點,單擊第一個空名稱,從右邊的終結點屬性中的Contract中我們可以看到,這里的Contract仍然用的是WcfServiceLibrary1.IService1

WCF服務庫及其托管-VS2010版

我們按照上面的做法,找到此WCF服務項目編譯出來的WcfServiceLibrary1.dll,雙擊它找到里面對應的ServiceContract點擊確定就可以了。

在高級目錄樹中,為服務行為配置命名,名字你自己決定。

WCF服務庫及其托管-VS2010版

在服務中選中,剛才的行為配置。

WCF服務庫及其托管-VS2010版

重點一定要記著保存,點擊菜單文件”-“保存就可以把我們對App.Config的修改保存回配置文件了。

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

 

  <system.web>

    <compilation debug="true" />

  </system.web>

  <!-- 部署服務庫項目時,必須將配置文件的內容添加到

  主機的 app.config文件中System.Configuration不支持庫的配置文件-->

  <system.serviceModel>

    <services>

      <service behaviorConfiguration="Service.Myservice"name="WcfServiceLibrary1.StudentService">

        <endpoint address="" binding="wsHttpBinding" contract="WcfServiceLibrary1.IStudentService">

          <identity>

            <dns value="localhost"/>

          </identity>

        </endpoint>

        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>

        <host>

          <baseAddresses>

            <add baseAddress="http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary1/Service1/"/>

          </baseAddresses>

        </host>

      </service>

    </services>

    <behaviors>

      <serviceBehaviors>

        <behavior name="Service.Myservice">

          <serviceMetadata httpGetEnabled="true" />

          <serviceDebug includeExceptionDetailInFaults="false" />

        </behavior>

      </serviceBehaviors>

    </behaviors>

  </system.serviceModel>

 

3測試WCF

 

Visual Studio 中為我們提供了測試WCF的工具,按F5啟動WCF會出現兩個東西 
    
一個是在右下角的托盤圖標中會出現WCFSVCHost(WCF服務主機),它為我們在開發時候提供了一個運行WCF服務器,用來為測試客戶端提供WCF服務。

WCF服務庫及其托管-VS2010版

另一個是“WCF測試客戶端

測試客戶端WcfSVCHost中取得WCF服務的元數據,解析為左側的服務結構樹,從這里面我們可以看到此WCF服務為我們提供了一個服務契約“IStudentService”,此服務契約中對外提供了三個可調用的方法。

點擊AddStudent()  方法 輸入參數 點擊 Invoke 調用

WCF服務庫及其托管-VS2010版

點擊GetAllStudents() ,在響應 中我們看到了返回的結果。

 WCF服務庫及其托管-VS2010版

在本例中我們看到,WCF作為面向對象和面向服務的橋梁 ,提供了非常方便的工具,無論是開發,配置還是測試,為我們可以快速的上手并提供面向服務的應用。你可以把WCF類庫當作普通類庫去做,但他提供了更強大的面向服務的特性。

WCF的理論學習復雜程度遠大于其的使用難度,而如果你是一名初學者,千萬不要先陷入其復雜的理論學習中,花費很多的時間,而且看得暈頭轉向,最好先去實踐,先去用,這樣再去看WCF的深入概念和技術才會在大腦里面形成更好理解的印象和對應。

 

 

附:

開發客戶端來托管WCF服務庫

新建控制臺應用程序(winform也可)

WCF服務庫及其托管-VS2010版

添加引用

WCF服務庫及其托管-VS2010版

 

Program.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.ServiceModel;

using WcfServiceLibrary1;

using System.Runtime.InteropServices;

 

 

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[]args)

        {

            using(ServiceHost hostser = new ServiceHost(typeof(StudentService)))

            {

                Console.WriteLine("Service服務啟動 ......");

                hostser.Open();

                Console.ReadLine();

            }

 

        }

    }

}

然后項目右鍵-添加-新建項

WCF服務庫及其托管-VS2010版

 

WCF服務庫的配置文件覆蓋到這個配置文件。

運行,

WCF服務庫及其托管-VS2010版

在瀏覽器打開配置文件的服務地址,就能看到效果了。

WCF服務庫及其托管-VS2010版


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西华县| 佛教| 阜阳市| 都昌县| 光泽县| 牙克石市| 西安市| 元阳县| 宜宾县| 玉龙| 荆州市| 称多县| 上饶县| 化隆| 永清县| 康定县| 西乡县| 新昌县| 庐江县| 寻乌县| 崇州市| 永福县| 灌阳县| 翁源县| 郓城县| 潍坊市| 桦川县| 杭锦旗| 阿瓦提县| 武威市| 娱乐| 庄浪县| 望谟县| 瑞昌市| 延长县| 武陟县| 翼城县| 河池市| 双辽市| 理塘县| 吉木萨尔县|