讓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“獨立版”
成倍提高服務器的負載能力:淺談Jexus的ASP.NET前置緩存技術
