C#之WCF服务实现大文件上传(分布式开发)第二集

创建宿主程序:用于启动和关闭服务:
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端口的服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值