wcf系列学习5天速成——第五天 服务托管
今天是系列的終結篇,當然要分享一下wcf的托管方面的知識。
?
wcf中托管服務一般有一下四種:
?
Console寄宿: ? ? ? ? ? ? 利于開發調試,但不是生產環境中的最佳實踐。
winform寄宿: ? ? ? ? ? ? 方便與用戶進行交互,用戶想開就開,想關就關,但如果機器重啟了,不得不自己手動開一下,危險+麻煩。
IIS寄宿: ? ? ? ? ? ? ? ? ? ?此寄宿在實戰項目中得到了廣泛的應用。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 好處有:隨系統啟動和停止。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?iis有大量的管理策略對其進行管理。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 即想利用wcf的功能,還想訪問asp.net的功能。
Window Service 寄宿: 這個寄宿在實戰中也是廣泛運用的,同時也是隨系統開啟或者停止。
?
好了,前兩種寄宿相信大家都會,在這里我就不介紹了,我主要介紹后兩種寄宿。
?
IIS寄宿: ?首先要知道寄宿于iis的3個條件: ?應用程序域(相當于serviceHost)+svc文件+config的配置節
? ? ? ? ? ? ?
? ? ? ? ? ? ?很感謝vs模板,里面已經包含用于寄宿于iis的模板,ok,上圖:
?下面的流程就是:
? ? ?點擊確定 ——> ?鼠標右擊wcf服務項目——>點擊“發布”——>在“發布方法”中選擇“文件部署”——>在"目標位置”選擇“保存位置”——>點擊“發布”按鈕
? ? ?
?
然后我們打開本地的IIS,新建網站,修改端口為1111,然后點擊確定按鈕,截圖如下:
?
?
前面我們已經說過寄宿在iis中的三個條件,
? ? ? ? ? ? ? ?首先看“應用程序域”:默認新建的網站在應用程序域中的.net framework的版本是2.0,
? ? ? ? ? ? ? ?所以我們必須修改為4.0版本。
? ? ? 截圖如下:
? ? ?
?
? ? ? ? ? ? 然后我們看一下"svc文件": iis寄宿有一個特點就是不用指定endpoint中的是address,因為svc文件的地址就是“endpoint”的地址,
? ? 也就是說如果我想預覽則需要在url中輸入此文件地址。
? ? ? ? ? ? 然后我們看一下”?http://localhost:1111/Service1.svc?wsdl"里面的元數據,發現binding是“basicHttpBinding”,也就是說如果
? ?想改變這個低端的binding,就必須修改三個條件中的最后的一個。
? ? ? ? ?截圖如下:
? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?最后看一下“config文件”,模板給我們生成的文件代碼如下:
? ? ?
1 <?xml version="1.0" encoding="utf-8"?>2 <configuration>
3
4 <system.web>
5 <compilation debug="true" targetFramework="4.0" />
6 </system.web>
7 <system.serviceModel>
8 <behaviors>
9 <serviceBehaviors>
10 <behavior>
11 <!-- 為避免泄漏元數據信息,請在部署前將以下值設置為 false 并刪除上面的元數據終結點 -->
12 <serviceMetadata httpGetEnabled="true"/>
13 <!-- 要接收故障異常詳細信息以進行調試,請將以下值設置為 true。在部署前設置為 false 以避免泄漏異常信息 -->
14 <serviceDebug includeExceptionDetailInFaults="false"/>
15 </behavior>
16 </serviceBehaviors>
17 </behaviors>
18 <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
19 </system.serviceModel>
20 <system.webServer>
21 <modules runAllManagedModulesForAllRequests="true"/>
22 </system.webServer>
23
24 </configuration>
? ? ?也就是說啥也沒有,要把binding改成wsHttpBinding,增加終結點即可:
? ? ??
1 <?xml version="1.0" encoding="utf-8"?>2 <configuration>
3
4 <system.web>
5 <compilation debug="true" targetFramework="4.0" />
6 </system.web>
7 <system.serviceModel>
8 <services>
9 <service name="WcfService1.Service1">
10 <endpoint address="" binding="wsHttpBinding" contract="WcfService1.IService1"></endpoint>
11 </service>
12 </services>
13 <behaviors>
14 <serviceBehaviors>
15 <behavior>
16 <!-- 為避免泄漏元數據信息,請在部署前將以下值設置為 false 并刪除上面的元數據終結點 -->
17 <serviceMetadata httpGetEnabled="true"/>
18 <!-- 要接收故障異常詳細信息以進行調試,請將以下值設置為 true。在部署前設置為 false 以避免泄漏異常信息 -->
19 <serviceDebug includeExceptionDetailInFaults="false"/>
20 </behavior>
21 </serviceBehaviors>
22 </behaviors>
23 <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
24 </system.serviceModel>
25 <system.webServer>
26 <modules runAllManagedModulesForAllRequests="true"/>
27 </system.webServer>
28
29 </configuration>
?
? 最后就是客戶端調用:
?
?
window server寄宿:
? ? ?要實現window server寄宿,也很感謝vs給我們提供了“window 服務”模板。
? ? ?步驟如下: ?“文件”->“新建“—>“項目”->"wcf服務庫"模板—>“點擊確定”—>右鍵服務庫項目添加“新建項”—>找到"window服務"—>"點擊添加"。
? ? ? ? ? ? ? ? ? ? ?為了方便我們將“WcfServiceLibrary1”改成Console應用程序,然后新建一個Main入口。
? ??
? 然后我們點擊上面的“單擊此處切換到代碼視圖”按鈕,進入到代碼視圖,
? 然后我們就可以在里面的"OnStart"和“OnStop”方法中添加代碼。
??
1 using System;2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Diagnostics;
6 using System.Linq;
7 using System.ServiceProcess;
8 using System.Text;
9 using System.ServiceModel;
10
11 namespace WcfServiceLibrary1
12 {
13 partial class Service2 : ServiceBase
14 {
15 public Service2()
16 {
17 InitializeComponent();
18 }
19
20 ServiceHost host;
21
22 protected override void OnStart(string[] args)
23 {
24 // TODO: 在此處添加代碼以啟動服務。
25 host = new ServiceHost(typeof(Service1));
26
27 host.Open();
28 }
29
30 protected override void OnStop()
31 {
32 // TODO: 在此處添加代碼以執行停止服務所需的關閉操作。
33 host.Close();
34 }
35 }
36 }
?然后我們在“設計界面” 點擊右鍵,找到”添加安裝程序“,點擊即可。
?
?
添加完成后會出現”servceProcessInstaller1"和“servcieInstaller1”的組件。
? ?右擊“serviceProcessInstaller1”,打開屬性窗口,修改Account為LocalSystem;
? ?
?
然后 右擊“servcieInstaller1”組件,打開屬性窗口
? ? ? ? 修改ServcieName為:MYServiceHost,也就是定義我的服務名。
? ? ? ? 修改StartType為:Automatic。
? ? ? ??
?
最后一步就是將exe注冊到window server中:
1 using System;2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.ServiceProcess;
6
7 namespace WcfServiceLibrary1
8 {
9 public class Program
10 {
11 public static void Main()
12 {
13 ServiceBase.Run(new Service2());
14 }
15 }
16 }
好了,現在我們可以編譯項目準備安裝部署了,vs給我們提供了一個InstallUtil.exe工具,
? ? ? ? ? ? ? ? 這個工具也就是真正的把我們的exe程序送到window server中。
?
打開cmd,要做的兩件事情就是正確的找到“InstallUtil.exe“ 和我們的”WcfServiceLibrary1.exe“
?
ok,安裝完成,現在做的就是測試工作。
看, 快看,我找到了我的window server 服務。
?
開啟一下服務,然后預覽一下wcf的address,看看是否真的啟動了。
哈哈,真的可以了,window service 寄宿大功告成。
?
至此,wcf5天速成系列也就圓滿結束了,最后感謝一下一直關注本系列的朋友。祝你們wcf學習更上一層樓。
?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的wcf系列学习5天速成——第五天 服务托管的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 针对web高并发量的处理
- 下一篇: 网络学习(七)Windows XP系统之