• .NET跨平台


    让WCF运行在Linux上(寄宿于服务器程序)

    WCF介绍请自行 bing 搜索

    使用的开发工具为vs2017,系统为 Ubuntu16.04

    服务器软件为Jexus ( 详情请看:  Jexus官网     国内唯一的 Linux DotNET 高级技术社区  )

    Mono版本信息( 具体安装请百度 Ubuntu安装Mono,推荐: Ubuntu安装Mono ): 

    Jexus版本信息 ( 下载地址:Jexus for linux V5.8.2 Mono通用版 ) :

    以上准备工作完成以后,

    打开 VS2017-->文件-->新建项目-->其他项目类型-->空白解决方案  新建工程名称为 WcfDemoProgram 

    ( 一 ) 创建WCF服务约束接口

    1、新建类库,类库名为IBLL,.net版本选择4.5

    2、创建完成后删除 默认创建的 Class1.cs 文件

    3、选中引用,右键添加引用,将  程序集-->框架  中的  Sytem.ServiceModel 添加到项目中

    4、新建接口 IWcfDemoService ,标记为 [ServiceContract] 服务器契约接口

    5、新建一个操作契约函数 Add, 标记为 [OperationContract] (等同于WebService中的WebMethod标记)

      代码如下:

    using System.ServiceModel;
    
    namespace IBLL
    {
        /// <summary>
        /// 服务契约接口
        /// </summary>
        [ServiceContract]
        public interface IWcfDemoService
        {
            /// <summary>
            /// 一个操作契约 (等同于WebService中的WebMethod)
            /// </summary>
            /// <param name="a"></param>
            /// <param name="b"></param>
            /// <returns></returns>
            [OperationContract]
            int Add(int a, int b);
        }
    }

    ( 二 ) 实现服务契约

    1、新建类库,类库名为BLL,.net版本选择4.5

    2、创建完成后删除 默认创建的 Class1.cs 文件

    3、选中引用,右键添加引用,将  项目-->解决方案  中的  IBLL 添加到项目中

    4、新建类 WcfDemoService,继承IWcfDemoService接口,并实现 Add 函数

      代码如下:

    using IBLL;
    
    namespace BLL
    {
        /// <summary>
        /// 实现服务契约业务类
        /// </summary>
        public class WcfDemoService: IWcfDemoService
        {
            public int Add(int a, int b)
            {
                return a + b;
            }
        }
    }

    ( 三 ) 创建WCF宿主程序

    1、新建一个空的WebApplication项目 WebHost

    2、需要将vs2017创建项目时默认引用的几个dll取消引用,右键选中 引用-->管理NuGet程序包-->已安装  删除这两个NuGet包:

                      

    3、选中引用,右键添加引用,将  项目-->解决方案  中的  BLL, IBLL 添加到项目中

    4、新建一个 类文件 名为WcfTestService.cs

    5、将 WcfTestService.cs 重命名为 WcfTestService.svc

    6、将 WcfTestService.svc 中的内容清空,写入内容(Service 的值 为 Web.config 中 service 节点的 name 属性值相同)

    <%@ ServiceHost Service="BLL.WcfDemoService" %>

    7、修改 WcfApp 的 Web.config 文件内容

        注:  serivce节点中 name属性的值必须为服务契约实现业务类的类名

    <?xml version="1.0" encoding="utf-8"?>
    <!--
      有关如何配置 ASP.NET 应用程序的详细信息,请访问
      https://go.microsoft.com/fwlink/?LinkId=169433
    -->
    <configuration>
      <system.web>
        <compilation debug="true" targetFramework="4.5"/>
        <httpRuntime targetFramework="4.5"/>
        <customErrors mode="Off"/>
      </system.web>
    
    
      <!-- =============================== WCF 配置开始  ===============================-->
      <system.serviceModel>
    
        <!-- services配置 -->
        <services>
          <!-- 单个服务配置 -->
          <!-- 注意: 服务名称必须与服务实现的配置名称相匹配。 -->
          <service name="BLL.WcfDemoService" behaviorConfiguration="WcfDemoServiceBehavior">
            <!-- 添加下列终结点。 -->
            <endpoint binding="basicHttpBinding" contract="IBLL.IWcfDemoService"/>
          </service>
          
        </services>
        
    
        <!-- 行为配置 -->
        <behaviors>
          <!-- 配置单个服务的行为 -->
          <serviceBehaviors>
            <behavior name="WcfDemoServiceBehavior">
              <serviceMetadata httpGetEnabled="true"/>
            </behavior>
          </serviceBehaviors>
          
        </behaviors>
    
      </system.serviceModel>
      <!-- =============================== WCF 配置结束  ===============================-->
    </configuration>

    以上就完成了一个简单的WCF服务的创建,只需要发布到服务器即可使用。

    Demo地址:   GitHub地址

    补充:

      经测试,使用Jexus独立版也同样能够正常运行Demo(Linux版本为Centos7.1)  点击下载Jexus独立版 5.8.2-x64.tar.gz

    推荐:

         张善友的技术博客

         衣明志的技术博客

         惊鸿哥的博客

         无需安装Mono就能运行ASP.NET的Jexus“独立版”

         [mononet原创] VIM超简教程

         让Jexus支持高并发请求的优化技巧

         成倍提高服务器的负载能力:浅谈Jexus的ASP.NET前置缓存技术

         Linux服务器上,用ASP.NET生成中文图片的要点

         让jexus 支持HTTPS协议(ssl加密传输)

  • 相关阅读:
    【openCV学习笔记】【2】读取并播放一段视频
    Net WebApi中使用Swagger
    .pfx格式和.Cer格式的区别
    数字证书原理
    ASP.NET发送电子邮件
    WindowsAzure上把WebApp和WebService同时部署在一个WebRole中
    JS原型与原型链终极详解
    三、ASP.NET MVC Controller 控制器(二:IController控制器的创建过程)
    二、ASP.NET MVC Controller 控制器(一:深入解析控制器运行原理)
    一、ASP.NET Routing路由(深入解析路由系统架构原理)
  • 原文地址:https://www.cnblogs.com/staneee/p/6675198.html
Copyright © 2020-2023  润新知