创建宿主程序:用于启动和关闭服务:
WCF不能直接运行,必须寄宿于某个指定的宿主((Windows Forms、Windows服务、WP应用程序等)。
几种常用的寄宿方式:
寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服务
具体寄宿Demo案例:可参考此链接地址:常用宿主程序的创建 下面以本项目为例,创建Winform寄宿宿主:
添加CRMMain WinForm 项目:
控件:启动和关闭服务按钮,以及提示信息label。
首先添加引用:
底层代码:
using CRMServer;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CRMMain
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
/// <summary>
/// 启动服务
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
ServiceHost serviceHost;
private void btnStart_Click(object sender, EventArgs e)
{
try
{
Uri uri = new Uri("http://localhost:8733/Design_Time_Addresses/CRMServer/FileService/");
serviceHost = new ServiceHost(typeof(FileService), uri);
//指定元数据,对接接口
serviceHost.AddServiceEndpoint(typeof(IFileService), new WSDualHttpBinding(), "");
serviceHost.Open();//开启服务
this.lblMessage.Text = "服务启动成功!";
this.btnStart.Enabled = false;
this.btnClose.Enabled = true;
}
catch (Exception ex)
{
this.lblMessage.Text = "服务启动失败!";
}
}
/// <summary>
/// 关闭服务
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnClose_Click(object sender, EventArgs e)
{
try
{
this.lblMessage.Text = "服务正在关闭中....请耐心等待!";
serviceHost.Close();//关闭服务
this.lblMessage.Text = "服务正常关闭!";
this.btnStart.Enabled = true;
this.btnClose.Enabled = false;
}
catch (Exception ex)
{
this.lblMessage.Text = "服务关闭失败!";
}
}
}
}
在宿主程序中启动和关闭服务:
1.通过ServiceHost创建指定的服务主机对象
2.调用AddServiceEndpoint (Type implementedContract, System.ServiceModel.Channels.Binding binding, string address)
方法添加终结点
3.查看继承关系:
调用CommunicationObject父类的Open和Close方法,启动和关闭对应的服务端这边注意:创建WCF服务时,使用的是wcf提供的测试端口:8733,
那我如何在Windows上添加其他端口,用于本项目服务。
防火墙–>高级设置
入站规则和出站规则:
端口:计算机与外界通讯交流的出入口
入站规则:开放其他远程访问本机服务的入口
出站规则:开放本机访问其他远程服务的出口
新建入站规则:
Step 1: 选择规则类型:选择程序或端口
Step 2: 程序:所有程序
Step 3: 允许连接
Step 4:全选
Step 5:输入名称即可(如:8734)
那么进站规则就添加成功,然后添加对应的出站规则。
那么此端口就可以使用了。
更改服务端的App.confign文件中的端口:
<host>
<baseAddresses>
<!--基地址-->
<add baseAddress="http://localhost:8734/Design_Time_Addresses/CRMServer/FileService/" />
</baseAddresses>
</host>
我们直接重新服务端CRMServer,宿主CRMMain,发现报错,可以直接打开CRMMain.exe直接运行,并在客户端重新添加8734端口的服务。