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

dotNet Linux 学习记录 - Jexus寄宿WCF服务的更多相关文章

  1. 轻松搞定Win8 IIS支持SVC 从而实现IIS寄宿WCF服务

    写在前面 为了尝试在IIS中寄宿WCF服务,需要配置IIS支持SVC命令,于是便有了在DOS命令中用到ServiceModelReg.exe注册svc命令. 坑爹的是注册成功后就开始报错.无奈之下两次 ...

  2. 通过IIS寄宿WCF服务

    WCF全面解析一书中的例子S104,直接将Service目录部署到iis是无法得到服务相应的,需要在项目中新建一个web项目,删除掉自动生成的所有文件之后,把Service目录下的Calculator ...

  3. 多线程编程学习笔记——异步调用WCF服务

    接上文 多线程编程学习笔记——使用异步IO 接上文 多线程编程学习笔记——编写一个异步的HTTP服务器和客户端 接上文 多线程编程学习笔记——异步操作数据库 本示例描述了如何创建一个WCF服务,并宿主 ...

  4. 关于IIS寄宿WCF服务,客户端不能生成代理类

    我在使用VS2010写好WCF的Web服务后,部署在IIS7.0上,可以在IE9上进行访问,并且能显示XML数据,如下图 然后我在项目的客户端进行服务的添加引用,如下图 VS2010自动生成代理类,但 ...

  5. 控制台中寄宿WCF服务

    一.首先创建一个类库,用来定义WCF服务 修改服务代码定义,具体代码如下 // 注意: 使用"重构"菜单上的"重命名"命令,可以同时更改代码和配置文件中的接口名 ...

  6. Linux学习-什么是 daemon 与服务 (service)

    『常驻在记体体中的程序,且可以提供 一些系统或网络功能,那就是服务』.而服务一般的英文说法是『 service 』. 那么 daemon 与 service 有关啰?否则为什么都能够提供 某些系统或网 ...

  7. Linux 学习记录 一(安装、基本文件操作).

         Linux distributions主要分为两大系统,一种是RPM方式安装软件的系统,包括Red Hat,Fedora,SuSE等都是这类:一种则是使用Debian的dpkg方式安装软件的 ...

  8. Linux 学习记录一(安装、基本文件操作).

    Linux 名字的由来,是当时作者将初版的 Linux 发布在网上,供别人下载完善,而那个核心文件夹就叫 Linux,就这么叫着了.而为什么 Linux 的吉祥物是一只企鹅呢?是因为当时大家要发行稳定 ...

  9. Linux学习记录

    ---恢复内容开始--- linux与unix的关系 linux是借鉴了unix设计思想,也称linux位类unix系统. Linux常用命令 1.命令基本格式 命令[选项][参数] 注意:个别命令不 ...

随机推荐

  1. XAMPP安装报错及解决

    FROM:http://www.zeeronsolutions.com/installing-xampp-on-windows-7-user-account-control-uac-warning-m ...

  2. 更全面的聊聊PRINCE2是什么

    1 什么是PRINCE2®? PRINCE2是一个非专有方法,已在全世界超过150个国家广泛使用,采用它的组织正在与日俱增. 它被广泛认为是项目管理的领先方法,超过2万个组织已经从其开创性的可信方法中 ...

  3. jemeter正则表达式

  4. 第1章1zabbix快速入门

    p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; t ...

  5. 【转】译—游戏开发者应该如何应用Git和GitHub

    原文地址:http://bbs.9ria.com/thread-259587-1-2.html "我确信Git是强大的,但是它看起来很复杂--我依然会坚持我当前的工作流"就像说&q ...

  6. CSS3学习笔记(1)-CSS3选择器

    p{ font-size: 15px; text-indent: 2em; } .alexrootdiv>div{ background: #eeeeee; border: 1px solid ...

  7. 4日6日--ES5新增数组方法

    forEach使用的函数调用,所以占内存比较大,不如定长for循环和迭代for循环 1.通过forEach将数组中的元素逐个表示出来(遍历方法,读取操作). 2.通过map将原数组中的元素进行算数运算 ...

  8. PHP对象相关知识点的总结

    对象传递:一种说法是"PHP对象是通过引用传递的",更准确的说法是别名(标识符)传递,即它们都保存着同一个标识符(ID)的拷贝,这个标识符指向同一个对象的真正内容. <?ph ...

  9. git常见操作指令

    由于公司用的是git进行版本管理,所以零零散散的学了一些常用到的git指令: 近日把廖雪峰前辈的git教程看了一遍,感觉操作起来更得心应手,在此做个记录,如有错漏望指正: git init //初始化 ...

  10. TCP/IP笔记(六)TCP与UDP

    终于来到了传输层,这个面试问的最多了,内容比较多,要分两篇来总结,这是第一篇