XAMARIN.ANDROID SIGNALR 實時消息接收發送示例

来源:http://www.cnblogs.com/forgetu/archive/2017/01/03/6246863.html
-Advertisement-
Play Games

SignalR 是一個開發實時 Web 應用的 .NET 類庫,使用 SignalR 可以很容易的構建基於 ASP.NET 的實時 Web 應用。SignalR 支持多種伺服器和客戶端,可以 Host 在 7.0 以上的 IIS 伺服器,或者通過 Owin Host 在桌面應用和 Windows 服 ...


SignalR 是一個開發實時 Web 應用的 .NET 類庫,使用 SignalR 可以很容易的構建基於 ASP.NET 的實時 Web 應用。SignalR 支持多種伺服器和客戶端,可以 Host 在 7.0  以上的 IIS 伺服器,或者通過 Owin Host 在桌面應用和 Windows 服務的進程中;支持的客戶端有瀏覽器、桌面應用、Siliverlight、各種手機等。

本文將會帶你做一個 WPF 應用 Host 的 SignalR 服務端,和一個 Xamarin.Android 的客戶端,實現服務端和客戶端的簡單的消息接收發送。

服務端:

1、新建一個 WPF 應用,通過 Nuget 添加引用 SignalR.SelfHost 類庫

Install-Package Microsoft.AspNet.SignalR.SelfHost

如果要支持跨域訪問,還需要引用 Microsoft.Owin.Cors 類庫

Install-Package Microsoft.Owin.Cors

2、做一個簡單的界面,顯示接收和發送的消息,在 MainWindow.xaml 中添加下麵的代碼:

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="10">
            <Button Name="UxStart" Click="UxStart_Click" Width="80" Height="30" Content="啟動" Margin="20,0"/>
            <Button Name="UxStop" Click="UxStop_Click" Width="80" Height="30" Content="停止"/>
        </StackPanel>
        <RichTextBox Name="UxInfo" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="10,0" IsReadOnly="True"/>
        <StackPanel Grid.Row="2" Orientation="Horizontal" Margin="10">
            <TextBox Name="UxMessage" HorizontalAlignment="Stretch" Width="400" Height="30"/>
            <Button Name="UxSend" Click="UxSend_Click" Width="80" Height="30" HorizontalAlignment="Right" Content="發送"/>
        </StackPanel>
    </Grid>

以上代碼添加了一個啟動按鈕和一個停止按鈕,用來啟動和停止 SignalR 服務端,接著添加一個 RichTextBox 用來顯示發送和收到的信息,然後是一個用來輸入要發送的信息的 TextBox 和一個 發送按鈕,最終界面如下:

chat-server-window
主窗體的 C# 代碼:

public partial class MainWindow : Window
    {
        private IDisposable _signalrServer;
        private string _serverUrl = "http://192.168.0.102:8080";
 
        public MainWindow()
        {
            InitializeComponent();
 
            UxStop.IsEnabled = false;
        }
                
        private void UxStart_Click(object sender, RoutedEventArgs e)
        {
            StartServer();
 
            UxStart.IsEnabled = false;
        }
 
        private void StartServer()
        {
            try
            {
                _signalrServer = WebApp.Start(_serverUrl);
 
                LogMessage("服務已啟動:" + _serverUrl + "\r");
                UxStop.IsEnabled = true;
            }
            catch (TargetInvocationException ex)
            {
                LogMessage(ex.Message);
            }
        }
 
        private void UxStop_Click(object sender, RoutedEventArgs e)
        {
            _signalrServer.Dispose();
            Close();
        }
 
        private void UxSend_Click(object sender, RoutedEventArgs e)
        {
            LogMessage("Server: " + UxMessage.Text + "\r");
 
            var context = GlobalHost.ConnectionManager.GetHubContext<HubDemo>();
            context.Clients.All.send("Server: ", UxMessage.Text);
 
            UxMessage.Text = "";
        }
 
        public void LogMessage(string message)
        {
            if (UxInfo.CheckAccess())
            {
                UxInfo.AppendText(message + "\r");
            }
            else
            {
                Dispatcher.Invoke(() =>
                {
                    UxInfo.AppendText(message + "\r");
                });
            }
        }
    }

以上代碼包含啟動服務,向所有客戶端發送消息,記錄消息幾個方法,代碼非常簡單,這裡就不做過多的解釋了。

3、添加一個 Startup 類,代碼如下:

internal class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseCors(CorsOptions.AllowAll);
            app.MapSignalR();
        }
    }

現在這裡只有兩句代碼,第一句啟用跨域支持,第二句映射 SignalR 的地址。

4、新建一個 Hub,這裡命名為 HubDemo,繼承 SignalR.Hub,代碼如下:

public class HubDemo : Hub
{
 public void Send(string name, string message)
 {
 _repository.Log(name, message);

 Clients.All.Send(name, message);
 }
}

這裡只有一個 Send 方法,發送用戶名和信息。

接著定義一個記錄接收和發送的消息的介面:

public interface IMessageRepository
{
 void Log(string name, string message);
}

介面中只定義了一個 Log 方法,帶有兩個 string 類型的參數,一個是發送消息的用戶名,一個是消息內容。

閱讀全文

 


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

-Advertisement-
Play Games
更多相關文章
  • 看下效果先 下麵有完整的示例代碼 使用BitmapShader(著色器) 我們在繪製view 的時候 就是小學上美術課 用水彩筆在本子上畫畫 使用著色器繪製圓形圖片最簡單的理解方式 就是把bitmap當做一種顏色 設置給paint ,paint都已經有顏色了 你想讓它方了,圓了,扁了 還不是看你心情 ...
  • 這幾天自己研究了關於地手機上面開發安卓地圖的問題,發現百度官方示例demo講解百度持續定位方面還是講解的有些不清楚,本人研究了幾次之後將其弄得更詳細以便於讓各位方便學習,有不足之處請在評論區指出,官方示例的網址是:http://lbsyun.baidu.com/index.php?title=and ...
  • 作者:Antonio Leiva 時間:Dec 27, 2016 原文鏈接:https://antonioleiva.com/custom-views-android-kotlin/ 在我們閱讀有關class文章時,你可能記得通常情況下僅用一個構造函數。這對於要創建定製視圖就是一個問題。 Andro ...
  • 一、到 百度地圖開發平臺下載SDK http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download 1、點擊自定義下載 2、下載自己想要的功能包我這裡選了三個 3、獲取密鑰 獲取密鑰之前我們要新建一個應用 填寫好相關的信息 二 ...
  • iOS微信第三方登錄實現 一、接入微信第三方登錄準備工作。移動應用微信登錄是基於OAuth2.0協議標準構建的微信OAuth2.0授權登錄系統。在進行微信OAuth2.0授權登錄接入之前,在微信開放平臺註冊開發者帳號,並擁有一個已審核通過的移動應用,並獲得相應的AppID和AppSecret,申請微 ...
  • 由[OpenDigg](http://www.opendigg.com/) 出品的安卓開源項目周報第四期來啦。我們的安卓開源周報集合了OpenDigg一周來新收錄的優質的安卓開發方面的開源項目,方便安卓開發人員便捷的找到自己需要的項目工具等。 ...
  • 崩潰提示:Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <CALayerArray: 0x14df0bd0> was mutated while being enumer ...
  • 參考文章網址: http://www.jianshu.com/p/7a2f49c654df 1.申請APPKey 2.在AppDelegate.m文件中的代碼示例 3.具體的方法實現 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...