让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加密传输)

.NET跨平台 - WCF & Mono的更多相关文章

  1. 在.NET Core之前,实现.Net跨平台之Mono+CentOS+Jexus初体验

    准备工作 本篇文章采用Mono+CentOS+Jexus的方式实现部署.Net的Web应用程序(实战,上线项目). 不懂Mono的请移步张善友大神的:国内 Mono 相关文章汇总 不懂Jexus为何物 ...

  2. 跨平台的.NET运行环境 Mono 3.2发布

    Mono是由Xamarin主办的一个开源项目平台,旨在让开发人员轻松构建跨平台的应用程序.Mono是基于ECMA标准来创建.NET框架,包括C#编译器和公共语言运行时(CLR),可以让.NET应用程序 ...

  3. 【Xamarin挖墙脚系列:Mono项目的图标为啥叫Mono】

    因为发起人大Boss :Miguel de lcaza 是西班牙人,喜欢猴子.................就跟Hadoop的创始人的闺女喜欢大象一样...................... 历 ...

  4. WCF全面解析学习(1)

    SOA的基本概念和设计思想 SOA并不是仅仅采用Web服务的架构,Web服务只是一种实现SOA的理想技术手段.SOA依赖于开放的标准.SOA的一个目标是让不同的厂商开发的服务能够相互操作. SOA支持 ...

  5. Mono+CentOS+Jexus

    在.NET Core之前,实现.Net跨平台之Mono+CentOS+Jexus初体验准备工作 本篇文章采用Mono+CentOS+Jexus的方式实现部署.Net的Web应用程序(实战,上线项目). ...

  6. [.NET跨平台]Jeuxs独立版本的便利与过程中的一些坑

    本文环境与前言 之前写过一篇相关的文章:在.NET Core之前,实现.Net跨平台之Mono+CentOS+Jexus初体验 当时的部署还是比较繁琐的,而且需要联网下载各种东西..有兴趣的可以看看, ...

  7. [.NET跨平台]Jexus独立版本的便利与过程中的一些坑

    本文环境与前言 之前写过一篇相关的文章:在.NET Core之前,实现.Net跨平台之Mono+CentOS+Jexus初体验 当时的部署还是比较繁琐的,而且需要联网下载各种东西..有兴趣的可以看看, ...

  8. WCF技术归纳

    本人在2013年就做过一个WCF的项目,但最近又开始看相关的文章,才发现当年的认识实在太浅显,这里我把WCF的几个重要知识点总结以下. ABC概念 WCF服务的构成如下图 如你所见,Host即为宿主, ...

  9. WPF路线图白皮书: 2015及未来

    介绍 当2006年微软首次推出Windows Presentation Foundation(WPF)时,它代表了应用程序的设计和开发又向前跨出了巨大的一步.它简化了GUI应用程序的开发,有助于UI和 ...

随机推荐

  1. 234 Palindrome Linked List 回文链表

    请检查一个链表是否为回文链表. 进阶:你能在 O(n) 的时间和 O(1) 的额外空间中做到吗? 详见:https://leetcode.com/problems/palindrome-linked- ...

  2. [ Luogu 4626 ] 一道水题 II

    \(\\\) \(Description\) 求一个能被\([1,n]\) 内所有数整除的最小数字,并对 \(100000007\) 取模 \(N\in [1,10^8]\) \(\\\) \(Sol ...

  3. ubuntu下编译VLC源码

    http://blog.csdn.net/beitiandijun/article/details/9225591ubuntu下编译VLC源码 分类: 视频处理 2013-07-02 17:33 57 ...

  4. moment.js 两个时间段的截取

    var a = moment([2008, 9, 29]);var b = moment([2007, 0, 10]);console.log(a.diff(b,'months'));//‘month ...

  5. python生成动态个性二维码

    1 安装工具2 生成普通二维码3 带图片的二维码4 动态 GIF 二维码5 在Python程序中使用 一.安装 首先在python环境下运行, 打开cmd进入python27 进入scripts 然后 ...

  6. Spartan6系列之器件引脚功能详述

    1.   Spartan-6系列封装概述 Spartan-6系列具有低成本.省空间的封装形式,能使用户引脚密度最大化.所有Spartan-6 LX器件之间的引脚分配是兼容的,所有Spartan-6 L ...

  7. TCP端口状态LISTENING ESTABLISHED CLOSE_WAIT TIME_WAIT SYN_SENT

    TCP状态转移要点 TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不 会被释放.网络服务器程序要同时管理 ...

  8. Spring框架系列(一)--Spring MVC基础知识

    Web项目开发过程中一般都是使用MVC(Model-View-Controller)模式,早先的Struts2到Spring MVC,再到现在Spring Boot,都是相似的思 路.Spring B ...

  9. ThinkPHP---TP拓展之获取IP信息

    [概论] (1)简述 在所有网站里,特别是用户管理系统,都喜欢记录用户访问的IP地址.对后期的业务开展有很大的意义,可以通过IP地址的记录访问出国内或全球范围内,哪一块用户比较多. 在后期做产品时,可 ...

  10. ThinkPHP---layer插件

    [概论] (1)layer是基于jquery开发的一款美化弹框的插件,主要用于弹框效果的交互.但其他功能和组件也日益完善 官网:http://layer.layui.com 在线手册:http://w ...