[索引页]
[源码下载]
作者: webabcd
介绍
WCF(Windows Communication Foundation) - 宿主(Hosting):WCF服务可以宿主在IIS, Application, WAS, WindowsService。本文以宿主在WindowsService为例。
示例
1、服务
IHello.cs
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;

using
System.ServiceModel;

namespace
WCF.ServiceLib.Sample
{
/// <summary>
/// IHello接口
/// </summary>
[ServiceContract]
public interface IHello
{
/// <summary>
/// 打招呼方法
/// </summary>
/// <param name="name">人名</param>
/// <returns></returns>
[OperationContract]
string SayHello(string name);
}
}
Hello.cs
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;

using
System.ServiceModel;

namespace
WCF.ServiceLib.Sample
{
/// <summary>
/// Hello类
/// </summary>
public class Hello : IHello
{
/// <summary>
/// 打招呼方法
/// </summary>
/// <param name="name">人名</param>
/// <returns></returns>
public string SayHello(string name)
{
return "Hello: " + name;
}
}
}
2、宿主
Hello.cs(WindowsService)
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;

using
System.ComponentModel;
using
System.Configuration;
using
System.Configuration.Install;
using
System.ServiceModel;
using
System.ServiceProcess;

namespace
WCF.ServiceHostByWindowsService.Sample
{
/// <summary>
/// 初始化 System.Configuration.Install.Installer 类的新实例。
/// </summary>
[RunInstaller(true)]
public class ProjectInstaller : Installer
{
private ServiceProcessInstaller process;
private ServiceInstaller service;

/// <summary>
/// 构造函数
/// </summary>
public ProjectInstaller()
{
process = new ServiceProcessInstaller();
process.Account = ServiceAccount.LocalSystem;
service = new ServiceInstaller();
service.ServiceName = "WCF.ServiceHostByWindowsService";
service.Description = "WCF服务宿主在WindowsService[webabcd测试用]";
base.Installers.Add(process);
base.Installers.Add(service);
}
}

/// <summary>
/// Windows服务类
/// </summary>
public class WindowsService : ServiceBase
{
public ServiceHost serviceHost = null;

/// <summary>
/// 主函数
/// </summary>
public static void Main()
{
ServiceBase.Run(new WindowsService());
}

/// <summary>
/// 构造函数
/// </summary>
public WindowsService()
{
base.ServiceName = "WCF.ServiceHostByWindowsService";
}

/// <summary>
/// 启动Windows服务
/// </summary>
/// <param name="args">args</param>
protected override void OnStart(string[] args)
{
if (serviceHost != null)
{
serviceHost.Close();
}

// 为WCF.ServiceLib.Sample.Hello创建ServiceHost
serviceHost = new ServiceHost(typeof(WCF.ServiceLib.Sample.Hello));

serviceHost.Open();

ServiceHost的几个事件(顾名思义)
}

/// <summary>
/// 停止Windows服务
/// </summary>
protected override void OnStop()
{
if (serviceHost != null)
{
serviceHost.Close();
serviceHost = null;
}
}
}
}
App.config
<?
xml version="1.0" encoding="utf-8"
?>
<
configuration
>
<
system.serviceModel
>
<
services
>
<!--
name - 提供服务的类名
-->
<!--
behaviorConfiguration - 指定相关的行为配置
-->
<
service
name
="WCF.ServiceLib.Sample.Hello"
behaviorConfiguration
="SampleBehavior"
>
<!--
address - 服务地址
-->
<!--
binding - 通信方式
-->
<!--
contract - 服务契约
-->
<
endpoint
address
=""
binding
="wsHttpBinding"
contract
="WCF.ServiceLib.Sample.IHello"
/>
<!--
元数据交换的endpoint
-->
<!--
注:address是mex,它会和host/baseAddresses节点中的baseAddress做拼接,即提供元数据交换的地址为:http://localhost:12345/Binding/mex
-->
<
endpoint
binding
="mexHttpBinding"
contract
="IMetadataExchange"
address
="mex"
/>
<
host
>
<
baseAddresses
>
<
add
baseAddress
="http://localhost:11233/ServiceHostByWindowsService/"
/>
</
baseAddresses
>
</
host
>
</
service
>
</
services
>
<
behaviors
>
<
serviceBehaviors
>
<
behavior
name
="SampleBehavior"
>
<
serviceMetadata
httpGetEnabled
="True"
/>
<
serviceDebug
includeExceptionDetailInFaults
="False"
/>
</
behavior
>
</
serviceBehaviors
>
</
behaviors
>
</
system.serviceModel
>
</
configuration
>
3、客户端
Hello.aspx
<%
@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Hello.aspx.cs"
Inherits="Hosting_Hello" Title="宿主Hosting(服务宿主在WindowsService)"
%>

<
asp:Content
ID
="Content1"
ContentPlaceHolderID
="head"
runat
="Server"
>
</
asp:Content
>
<
asp:Content
ID
="Content2"
ContentPlaceHolderID
="ContentPlaceHolder1"
runat
="Server"
>
<
div
>
<
ul
>
<
li
style
="color: Red;"
>
本例为宿主在WindowsService的示例
</
li
>
<
li
>
宿主在IIS请参见本解决方案的ServiceHost项目
</
li
>
<
li
>
宿主在应用程序请参见本解决方案的ServiceHost2项目
</
li
>
<
li
>
应用程序自宿主就是把本解决方案的ServiceLib项目和ServiceHost2项目结合在一起
</
li
>
<
li
>
宿主在Windows Activation Services(WAS),因为我没有环境,就先不写示例了
</
li
>
</
ul
>
</
div
>
<
asp:TextBox
ID
="txtName"
runat
="server"
Text
="webabcd"
/>
<
asp:Button
ID
="btnSayHello"
runat
="server"
Text
="Hello"
OnClick
="btnSayHello_Click"
/>
</
asp:Content
>
Hello.aspx.cs
using
System;
using
System.Collections;
using
System.Configuration;
using
System.Data;
using
System.Linq;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.HtmlControls;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Xml.Linq;

public
partial
class
Hosting_Hello : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

protected void btnSayHello_Click(object sender, EventArgs e)
{
var proxy = new HostingByWindowsService.HelloClient();

Page.ClientScript.RegisterStartupScript(
this.GetType(),
"js",
string.Format("alert('{0}')", proxy.SayHello(txtName.Text)),
true);

proxy.Close();
}
}
Web.config
<?
xml version="1.0"
?>
<
configuration
>
<
system.serviceModel
>
<
client
>
<!--
address - 服务地址
-->
<!--
binding - 通信方式
-->
<!--
contract - 服务契约
-->
<
endpoint
address
="http://localhost:11233/ServiceHostByWindowsService/"
binding
="wsHttpBinding"
contract
="Sample.IHello"
/>
</
client
>
</
system.serviceModel
>
</
configuration
>
运行结果:
启动 "WCF.ServiceHostByWindowsService"服务,单击"Hello "按钮后弹出提示框,显示"Hello: webabcd"
OK
[源码下载]
[源码下载]
化零为整WCF(5) - 宿主Hosting(宿主在IIS, Application, WAS, WindowsService)
作者: webabcd
介绍
WCF(Windows Communication Foundation) - 宿主(Hosting):WCF服务可以宿主在IIS, Application, WAS, WindowsService。本文以宿主在WindowsService为例。
示例
1、服务
IHello.cs

























Hello.cs


























2、宿主
Hello.cs(WindowsService)





























































































App.config
































3、客户端
Hello.aspx




















Hello.aspx.cs


































Web.config












运行结果:
启动 "WCF.ServiceHostByWindowsService"服务,单击"Hello "按钮后弹出提示框,显示"Hello: webabcd"
OK
[源码下载]