WCF - Self hosting service
要 Self hosting WCF 的服務。首先要先將 System.ServiceModel 加入參考。
{% img /images/posts/WCFSelfHosting/1.png %}
接著在程式設計中建立 ServiceHost。建立的同時要指定欲運行的 Service 型態,以及要 Host 的位置。
var serviceUrl = "http://localhost:6525/ExecuteService";
var serviceUri = new Uri( serviceUrl );
using (var host = new ServiceHost (typeof(WcfServiceLibrary1. ExecuteService), serviceUri))
{
...
}
再來要建立 ServiceMetadataBehavior 並對其做些對應的設定,像是啟用 HttpGet。
...
var smb = new ServiceMetadataBehavior ();
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
...
將剛建立的 ServiceMetadataBehavior 加到 ServiceHost.Description.Behaviors。
...
host.Description.Behaviors.Add(smb);
...
在開始需要服務時,叫用 ServiceHost 的 Open 方法啟用 WCF 服務。
...
host.Open();
...
接著使用 WCF Service 所提供的服務。
當不再需要使用 WCF Service 服務時,叫用 ServiceHost 的 Close 方法關閉 WCF 服務。
...
host.Close();
...
整個程式寫起來會像下面這樣:
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.Text;
using System.Threading.Tasks;
using ConsoleApplication16.ServiceReference1;
namespace ConsoleApplication16
{
class Program
{
static void Main(string[] args)
{
Uri baseAddress = new Uri( "http://localhost:6525/ExecuteService" );
using (ServiceHost host = new ServiceHost (typeof(WcfServiceLibrary1. ExecuteService), baseAddress))
{
ServiceMetadataBehavior smb = new ServiceMetadataBehavior ();
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.Description.Behaviors.Add(smb);
host.Open();
var client = new ExecuteServiceClient();
var result = client.Execute("test");
Console.WriteLine(result);
host.Close();
}
}
}
}
像這樣的程式運行起來會連帶將 WCF Service 給帶起。
{% img /images/posts/WCFSelfHosting/2.png %}
此時開啟瀏覽器做個簡單的測試,若是服務正常運作,應可看到該服務頁面。
{% img /images/posts/WCFSelfHosting/3.png %}