WCF寄宿控制台.WindowsService.WinFrom.WebAPI寄宿控制台和windows服務

来源:http://www.cnblogs.com/Gao1234/archive/2017/08/03/7279964.html
-Advertisement-
Play Games

先建立wcf類庫.會預設生成一些試用代碼.如下: public class Service1 { public string GetData(int value) { return string.Format("You entered: {0}", value); } } 寄宿控制台.代碼如下 us ...


先建立wcf類庫.會預設生成一些試用代碼.如下:

   public class Service1

{

public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}

}

寄宿控制台.代碼如下

 

using System.ServiceModel;

using WcfServiceLibrary1;

 

ServiceHost serviceHost = new ServiceHost(typeof(Service1));
if (serviceHost.State != CommunicationState.Opened)
{
serviceHost.Open();
}

Console.WriteLine("WCF 服務正在運行......");
Console.WriteLine("輸入回車鍵 <ENTER> 退出WCF服務");
Console.ReadLine();
serviceHost.Close();

 

寄宿winform如下:

建立winform項目.會預設生成form1窗體

using System.ComponentModel;
using System.ServiceModel;

using WcfServiceLibrary1;

ServiceHost serviceHost = null;
BackgroundWorker worker = null;

 

public Form1()
{
InitializeComponent();
worker = new BackgroundWorker();
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.DoWork += new DoWorkEventHandler(worker_DoWork);

if (!worker.IsBusy)
{
worker.RunWorkerAsync();
}
}

void worker_DoWork(object sender, DoWorkEventArgs e)
{
try
{
serviceHost = new ServiceHost(typeof(Service1));
if (serviceHost.State != CommunicationState.Opened)
{
serviceHost.Open();
}

e.Result = "正常";
}
catch (Exception ex)
{
e.Result = ex.Message;
}
}

void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Result != null)
{
if (e.Result.ToString() == "正常")
{
tssTips.Text = "服務正在進行偵聽......";
}
else
{
tssTips.Text = string.Format("錯誤:{0}", e.Result);
}

lblTips.Text = tssTips.Text;
}
//錯誤處理
}

 

寄宿WindowService

添加WindowService類庫

Service1如下:

using System.ServiceModel;
using System.ServiceProcess;

 

protected override void OnStart(string[] args)
{
// TODO: 在此處添加代碼以啟動服務。
try
{
serviceHost = new ServiceHost(typeof(WcfServiceLibrary1.Service1));
if (serviceHost.State != CommunicationState.Opened)
{
serviceHost.Open();
}
}
catch (Exception ex)
{
//LogTextHelper.Error(ex);
}

// LogTextHelper.Info(Constants.ServiceName + DateTime.Now.ToShortTimeString() + "已成功調用了服務一次。");

//LogTextHelper.Info(Constants.ServiceName + "已成功啟動。");
}

 

/*
選中service1添加安裝程式
選中serviceProcessInstaller1組件,查看屬性,設置account為LocalSystem

選中serviceInstaller1組件,查看屬性
設置ServiceName的值, 該值表示在系統服務中的名稱
設置StartType, 如果為Manual則手動啟動,預設停止,如果為Automatic為自動啟動
設置Description,添加服務描述

點擊 開始,運行中輸入cmd,獲取命令提示符
win7需要已管理員的身份啟動,否則無法安裝

輸入 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 回車
切換當前目錄,此處需要註意的是,在C:\Windows\Microsoft.NET\Framework目錄下有很多類似版本,具體去哪個目錄要看項目的運行環境,例 如果是.net framework2.0則需要輸入 cd C:\Windows\Microsoft.NET\Framework\v2.0.50727

輸入 InstallUtil.exe D:\G工作\WCF寄宿WindowsService\WcfServiceLibrary1\windowsservice\bin\Debug\windowsservice.exe 回車
說明:D:\G工作\WCF寄宿WindowsService\WcfServiceLibrary1\windowsservice\bin\Debug\windowsservice.exe 示項目生成的exe文件位置

卸載很簡單,打開cmd, 直接輸入 sc delete WinServiceTest便可
*/

如果想要測試WCF是否正常運行

新建一個控制台程式.右鍵添加服務引用

ip地址在WCF類庫中如下:

<service name="WcfServiceLibrary1.Service1">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8733/Design_Time_Addresses/WcfServiceLibrary1/Service1/" />
</baseAddresses>
</host>

 

接下來是WEBAPI的寄宿

 

WEBAPI相比WCF 前者是REST架構.後者是SOAP架構.在選擇宿主的時候就能看出WEBAPI的輕量級

 

新建控制台程式

nuget 安裝 SelfHost 

static void Main(string[] args)
{

var config = new HttpSelfHostConfiguration("http://localhost:8080");

config.Routes.MapHttpRoute(
"API Default", "api/{controller}/{id}",
new { id = RouteParameter.Optional });

using (HttpSelfHostServer server = new HttpSelfHostServer(config))
{
server.OpenAsync().Wait();
Console.WriteLine("Press Enter to quit.");
Console.ReadLine();
}
}

public class Product
{
public string Name { get; set; }
public string Price { get; set; }
}
public class ProductsController : ApiController
{
static List<Product> products = new List<Product>() {
new Product(){Name="product1",Price="2.55"},
new Product(){Name="product2",Price="2.3"}
};
public IEnumerable<Product> Get()
{
return products;
}
}

運行之後可以通過地址欄調用或者Ajax

地址欄如下

http://localhost:8080/api/products/

 

在這裡.我們發現只要註冊路由.然後寫一個控制器.就可以完成WEBAPI的功能.非常輕盈

 

 

新建WindowsService服務

 

安裝SelfHost

using System.ServiceProcess;
using System.Web.Http;
using System.Web.Http.SelfHost;

 

在WindowService.Service中代碼如下:

public partial class Service1 : ServiceBase
{

private HttpSelfHostServer _server;
private readonly HttpSelfHostConfiguration _config;
public const string ServiceAddress = "http://localhost:1345";

public Service1()
{
InitializeComponent();
_config = new HttpSelfHostConfiguration(ServiceAddress);
_config.Routes.MapHttpRoute("DefaultApi",
"api/{controller}/{id}",
new { id = RouteParameter.Optional });
}

protected override void OnStart(string[] args)
{

#region Web Api監聽
_server = new HttpSelfHostServer(_config);
_server.OpenAsync();
#endregion

}

protected override void OnStop()
{
_server.CloseAsync().Wait();
_server.Dispose();
}

public class ApiServiceController : ApiController
{
[HttpGet]
public string Get()
{
return "Hello from windows service!";
}
}

}

http://localhost:1345/api/products/ApiService


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • .NET Core 2.0來了,你還等什麼?使用VS Code開發一個基於.NET Core 2.0的 MVC Web應用程式,時尚又閃耀的CMS就要出場啦。好,我這就要開始趟坑了,要不要和我一起哇? ...
  • 本文是利用C# 實現中國象棋的棋盤,棋子繪製,以及初始化佈局,並不實現中國象棋的對弈邏輯 ...
  • 官方教程:http://plugins.krajee.com/file-input#ajax-uploads 下載官方Demo後,引用樣式和js文件,此項目是將所有的文件放在一個文件下 下載官方Demo後,引用樣式和js文件,此項目是將所有的文件放在一個文件下 <body> <form> <div> ...
  • 把輸出到sqlserver資料庫中。 輸出到資料庫中和文件中類似,具體配步驟如下 第一步、創建資料庫 第二步、配置log4net.config 第三步、配置properties 在站點properties 下找到AssemblyInfo增加[assembly: log4net.Config.XmlC ...
  • log4net在ASP.NET MVC中的配置,還有一種配置方式,即不在web.config中,而是單獨新建一個log4net.config 在根目錄下 第一、引用log4net.dll 第二、在站點根目錄下增加log4net.config <?xml version="1.0" encoding= ...
  • 1. 去官網下載log4net.dll,增加引用到站點下(你也可以通過nuget 安裝) http://logging.apache.org/log4net/download_log4net.cgi 2. 在Web.config中增加配置(這裡按日誌文件輸出) <configSections> <s ...
  • 雖然接觸了兩者有一段時間了,但是有時還是會混淆概念,在此處不打算說明二者的區別,因為二者都是架構模式,並且也有一定的共存度,在實際開發中,嚴格區分意義不大。基於最近涉及到這部分知識就在複習下,編程過程中,基礎概念更重要,而不是技術。 先看看,三層架構吧,即UI(表示層),BLL(業務邏輯層),DAL ...
  • 什麼是流,我認為流就是對IO設備的一種抽象。流將各種千差萬別的設備統一抽象成一種模型,向用戶提供一個統一的編程介面,用戶無需瞭解設備內部細節,就可完成對設備的IO操作,大大簡化開發難度。 流這個概念很重要,很大一部分初涉獵編程的人(包括我),犯眼高手低的錯誤,認為流不就是對控制台,文件的讀寫操作嗎? ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...