WCF簡(jiǎn)單例子+Asp.Net MVC調(diào)用+WinForm調(diào)用

1.創(chuàng)建WCF服務(wù)項(xiàng)目:

闡述:WCF服務(wù)庫(kù)與WCF服務(wù)應(yīng)用程序的區(qū)別。

WCF服務(wù)庫(kù)趟紊,可以認(rèn)為是一個(gè)包含WCF服務(wù)以及契約定義的類(lèi)庫(kù)椒振。這兒庫(kù)還不能直接運(yùn)行,你可以在其他項(xiàng)目里引用布隔,在宿主里啟用托管這個(gè)庫(kù)离陶。

而WCF應(yīng)用程序,是一個(gè)可以執(zhí)行的程序执泰,它有獨(dú)立的進(jìn)程枕磁,WCF服務(wù)類(lèi)契約的定義,可以直接看到運(yùn)行的效果术吝。此項(xiàng)目模板應(yīng)該是基于IIS托管的程序计济。

前者一般考慮WCF服務(wù)設(shè)計(jì)的時(shí)候,服務(wù)類(lèi)的定義為單獨(dú)的庫(kù)排苍,可以為其它項(xiàng)目使用沦寂。提高代碼的復(fù)用性。

后者在開(kāi)發(fā)基于IIS托管的WCF服務(wù)程序時(shí)淘衙,比較多見(jiàn)传藏,自學(xué)的時(shí)候也可以使用這種類(lèi)型。

當(dāng)然你也可以修改這些代碼彤守,比如把WCF服務(wù)程序里的類(lèi)毯侦,移到一個(gè)單獨(dú)的類(lèi)庫(kù)里。

1) WCF服務(wù)應(yīng)用程序項(xiàng)目的創(chuàng)建:


WCF服務(wù)應(yīng)用程序的目錄結(jié)構(gòu):


IService1.cs代碼:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.ServiceModel.Web;

using System.Text;

namespace WcfService

{

? ? // 注意: 使用“重構(gòu)”菜單上的“重命名”命令具垫,可以同時(shí)更改代碼和配置文件中的接口名“IService1”侈离。

? ? [ServiceContract]

? ? public interface IService1

? ? {

? ? ? ? [OperationContract]

? ? ? ? /* 增加車(chē)票的方法*/

? ? ? ? void AddTicket(int count);

? ? ? ? [OperationContract]

? ? ? ? /*購(gòu)買(mǎi)車(chē)票的方法*/

? ? ? ? int BuyTickets(int Num);

? ? ? ? [OperationContract]? //服務(wù)契約? 即提供服務(wù)的實(shí)現(xiàn)方法

? ? ? ? /*查詢(xún)車(chē)票的方法*/

? ? ? ? int GetRemainingNum();

? ? ? ? // TODO: 在此添加您的服務(wù)操作

? ? }

? ? // 使用下面示例中說(shuō)明的數(shù)據(jù)約定將復(fù)合類(lèi)型添加到服務(wù)操作。

? ? //數(shù)據(jù)契約?

? ? [DataContract]?

? ? public class Ticket

? ? {

? ? ? ? bool boolCount =true;//判斷是否還有車(chē)票

? ? ? ? static int howmany = 10;//還有多少車(chē)票

? ? ? ? [DataMember]

? ? ? ? //判斷是否還有票

? ? ? ? public bool BoolCalue

? ? ? ? {

? ? ? ? ? ? get { return boolCount; }

? ? ? ? ? ? set

? ? ? ? ? ? {

? ? ? ? ? ? ? ? if (HowMany > 0)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? boolCount = true;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? boolCount = false;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? [DataMember]

? ? ? ? //返回票數(shù)

? ? ? ? public int HowMany

? ? ? ? {

? ? ? ? ? ? get { return howmany; }

? ? ? ? ? ? set { howmany = value; }

? ? ? ? }

? ? }

}

Service1.svc代碼:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.ServiceModel.Web;

using System.Text;

namespace WcfService

{

? ? // 注意: 使用“重構(gòu)”菜單上的“重命名”命令筝蚕,可以同時(shí)更改代碼卦碾、svc 和配置文件中的類(lèi)名“Service1”铺坞。

? ? // 注意: 為了啟動(dòng) WCF 測(cè)試客戶(hù)端以測(cè)試此服務(wù),請(qǐng)?jiān)诮鉀Q方案資源管理器中選擇 Service1.svc 或 Service1.svc.cs洲胖,然后開(kāi)始調(diào)試济榨。

? ? public class Service1 : IService1

? ? {

? ? ? ? Ticket T = null;

? ? ? ? public Service1() {

? ? ? ? ? ? T = new Ticket();

? ? ? ? }

? ? ? ? /*實(shí)現(xiàn)添加票數(shù)的方法*/

? ? ? ? public void AddTicket(int count)

? ? ? ? {

? ? ? ? ? ? T.HowMany = T.HowMany + count;

? ? ? ? }

? ? ? ? /*實(shí)現(xiàn)返回票數(shù)的方法*/

? ? ? ? public int GetRemainingNum()

? ? ? ? {

? ? ? ? ? ? return T.HowMany;

? ? ? ? }

? ? ? ? /*實(shí)現(xiàn)購(gòu)買(mǎi)車(chē)票的方法*/

? ? ? ? public int BuyTickets(int Num)

? ? ? ? {

? ? ? ? ? ? if (T.BoolCalue)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? T.HowMany = T.HowMany - Num;

? ? ? ? ? ? ? ? return 1;

? ? ? ? ? ? }

? ? ? ? ? ? else

? ? ? ? ? ? {

? ? ? ? ? ? ? ? return 0;

? ? ? ? ? ? }

? ? ? ? }

? ? }

}

Web.config:

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

<configuration>

? <appSettings>

? ? <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />

? </appSettings>

? <system.web>

? ? <compilation debug="true" targetFramework="4.5" />

? ? <httpRuntime targetFramework="4.5"/>

? </system.web>

? <!--追加的代碼-->

? <system.serviceModel>

? ? <behaviors>

? ? ? <serviceBehaviors>

? ? ? ? <behavior>

? ? ? ? ? <!-- 為避免泄漏元數(shù)據(jù)信息,請(qǐng)?jiān)诓渴鹎皩⒁韵轮翟O(shè)置為 false -->

? ? ? ? ? <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>

? ? ? ? ? <!-- 要接收故障異常詳細(xì)信息以進(jìn)行調(diào)試绿映,請(qǐng)將以下值設(shè)置為 true擒滑。在部署前設(shè)置為 false 以避免泄漏異常信息 -->

? ? ? ? ? <serviceDebug includeExceptionDetailInFaults="false"/>

? ? ? ? </behavior>

? ? ? </serviceBehaviors>

? ? </behaviors>

? ? <protocolMapping>

? ? ? ? <add binding="basicHttpsBinding" scheme="https" />

? ? </protocolMapping>? ?

? ? <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

? </system.serviceModel>

? <system.webServer>

? ? <modules runAllManagedModulesForAllRequests="true"/>

? ? <!--

? ? ? ? 若要在調(diào)試過(guò)程中瀏覽 Web 應(yīng)用程序根目錄,請(qǐng)將下面的值設(shè)置為 True绘梦。

? ? ? ? 在部署之前將該值設(shè)置為 False 可避免泄露 Web 應(yīng)用程序文件夾信息橘忱。

? ? ? -->

? ? <directoryBrowse enabled="false"/>

? </system.webServer>

</configuration>

2) WCF服務(wù)庫(kù)項(xiàng)目的創(chuàng)建:


目錄結(jié)構(gòu):


IService1.cs與Service1.cs文件的源碼同上。

2.創(chuàng)建Asp.Net MVC 項(xiàng)目 調(diào)用WcfService:


目錄結(jié)構(gòu):


1)添加服務(wù)引用:


右鍵引用->添加服務(wù)引用->發(fā)現(xiàn)(找到自己剛剛創(chuàng)建的WCF應(yīng)用程序服務(wù):WcfService)->選中->確認(rèn)

再添加程序集 System.ServiceModel:

右鍵引用->添加引用->System.ServiceModel

TestController:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

namespace WebApplication1.Controllers

{

? ? public class TestController : Controller

? ? {

? ? ? ? // GET: Test

? ? ? ? public ActionResult Index()

? ? ? ? {

? ? ? ? ? ? ServiceReference1.Service1Client TClient = new WebApplication1.ServiceReference1.Service1Client();

? ? ? ? ? ? int i = TClient.BuyTickets(1); //調(diào)用WCF中的方法

? ? ? ? ? ? if (i == 1)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? //控制臺(tái)輸出

? ? ? ? ? ? ? ? System.Diagnostics.Debug.WriteLine("------------購(gòu)買(mǎi)成功--------------\n"+"當(dāng)前票數(shù):"+TClient.GetRemainingNum());

? ? ? ? ? ? }

? ? ? ? ? ? return View();

? ? ? ? }

? ? }

}

運(yùn)行效果:


3.創(chuàng)建WinForm窗體調(diào)用WcfService:


項(xiàng)目名:WindowsFormsClient

添加服務(wù)(程序集與WcfService):原理同上卸奉。

目錄結(jié)構(gòu):


設(shè)計(jì)器的代碼:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace WindowsFormsClient

{

? ? public partial class Form2 : Form

? ? {

? ? ? ? public Form2()

? ? ? ? {

? ? ? ? ? ? InitializeComponent();

? ? ? ? }

? ? ? ? ServiceReference1.Service1Client TClient = new WindowsFormsClient.ServiceReference1.Service1Client();

? ? ? ? //購(gòu)買(mǎi)車(chē)票

? ? ? ? private void button1_Click(object sender, EventArgs e)

? ? ? ? {

? ? ? ? ? ? int i = TClient.BuyTickets(1); //調(diào)用WCF中的方法

? ? ? ? ? ? if (i == 1)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? this.label1.Text = "購(gòu)買(mǎi)成功";

? ? ? ? ? ? }

? ? ? ? ? ? this.label1.Text += "剩余車(chē)票還有" + TClient.GetRemainingNum().ToString();

? ? ? ? }

? ? ? ? //查詢(xún)票數(shù)

? ? ? ? private void button2_Click(object sender, EventArgs e)

? ? ? ? {

? ? ? ? ? ? this.label1.Text = "";

? ? ? ? ? ? this.label1.Text = TClient.GetRemainingNum().ToString();//調(diào)用WCF中的方法

? ? ? ? }

? ? }

}

源碼下載地址:https://download.csdn.net/download/laizhixue/10969849

---------------------

作者:laizhixue

來(lái)源:CSDN

原文:https://blog.csdn.net/laizhixue/article/details/87863873

版權(quán)聲明:本文為博主原創(chuàng)文章钝诚,轉(zhuǎn)載請(qǐng)附上博文鏈接!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末榄棵,一起剝皮案震驚了整個(gè)濱河市凝颇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疹鳄,老刑警劉巖拧略,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異瘪弓,居然都是意外死亡垫蛆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)腺怯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)袱饭,“玉大人,你說(shuō)我怎么就攤上這事呛占÷枪裕” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵晾虑,是天一觀的道長(zhǎng)疹味。 經(jīng)常有香客問(wèn)我,道長(zhǎng)帜篇,這世上最難降的妖魔是什么糙捺? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮笙隙,結(jié)果婚禮上继找,老公的妹妹穿的比我還像新娘。我一直安慰自己逃沿,他們只是感情好婴渡,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著凯亮,像睡著了一般边臼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上假消,一...
    開(kāi)封第一講書(shū)人閱讀 49,785評(píng)論 1 290
  • 那天柠并,我揣著相機(jī)與錄音,去河邊找鬼富拗。 笑死臼予,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的啃沪。 我是一名探鬼主播粘拾,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼创千!你這毒婦竟也來(lái)了缰雇?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤追驴,失蹤者是張志新(化名)和其女友劉穎械哟,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體殿雪,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡暇咆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丙曙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爸业。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖河泳,靈堂內(nèi)的尸體忽然破棺而出沃呢,到底是詐尸還是另有隱情,我是刑警寧澤拆挥,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布薄霜,位于F島的核電站,受9級(jí)特大地震影響纸兔,放射性物質(zhì)發(fā)生泄漏惰瓜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一汉矿、第九天 我趴在偏房一處隱蔽的房頂上張望崎坊。 院中可真熱鬧,春花似錦洲拇、人聲如沸奈揍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)男翰。三九已至另患,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蛾绎,已是汗流浹背昆箕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留租冠,地道東北人鹏倘。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像顽爹,于是被迫代替她去往敵國(guó)和親纤泵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 2,694評(píng)論 0 3
  • 目錄本次給大家介紹的是我收集以及自己個(gè)人保存一些.NET面試題第二篇簡(jiǎn)介1.接口2.您在什么情況下會(huì)用到虛方法或抽...
    寒劍飄零閱讀 1,965評(píng)論 0 10
  • 【程序1】 題目:古典問(wèn)題:有一對(duì)兔子话原,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子夕吻,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔...
    開(kāi)心的鑼鼓閱讀 3,310評(píng)論 0 9
  • 【程序1】 題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子繁仁,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一...
    阿里高級(jí)軟件架構(gòu)師閱讀 3,283評(píng)論 0 19
  • bfc 是盒模型布局的css渲染模式涉馅。屬于正常文檔流。 首先BFC是一個(gè)名詞黄虱,是一個(gè)獨(dú)立的布局環(huán)境稚矿,我們可以理解為...
    debt閱讀 369評(píng)論 0 0