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 和一个 发送按钮,最终界面如下:


主窗体的 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 类型的参数,一个是发送消息的用户名,一个是消息内容。

阅读全文

XAMARIN.ANDROID SIGNALR 实时消息接收发送示例的更多相关文章

  1. WebForm SignalR 实时消息推送

    原文:https://www.jianshu.com/p/ae25d0d77011 官方文档:https://docs.microsoft.com/zh-cn/aspnet/signalr/ 实现效果 ...

  2. [置顶] Xamarin android如何调用百度地图入门示例(一)

    在Xamarin android如何调用百度地图呢? 首先我们要区分清楚,百度地图这是一个广泛的概念,很多刚刚接触这个名词"百度地图api",的确是泛泛而谈,我们来看一下百度地图的 ...

  3. ActiveMQ 实现消息接收发送

    一.接收者 package com.demo.initservice; import javax.jms.Connection; import javax.jms.ConnectionFactory; ...

  4. .netcore signalR 实时消息推送

    服务器端引入包 Install-Package Microsoft.AspNetCore.SignalR客户端引入包  npm install @aspnet/signalr <template ...

  5. [置顶] Xamarin android中使用signalr实现即时通讯

    前面几天也写了一些signalr的例子,不过都是在Web端,今天我就来实践一下如何在xamarin android中使用signalr,刚好工作中也用到了这个,也算是总结一下学到的东西吧,希望能帮助你 ...

  6. SignalR在Xamarin Android中的使用

    原文:SignalR在Xamarin Android中的使用 ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 ...

  7. 探索 OpenStack 之(15):oslo.messaging 和 Cinder 中 MessageQueue 消息的发送和接收

    前言:上一篇文章 只是 RabbitMQ 的科普,本文将仔细分析 Cinder 中 RabbitMQ 的各组件的使用.消息的发送和接收等.由于各流程步骤很多,本文只会使用若干流程图来加以阐述,尽量做到 ...

  8. XAMARIN ANDROID 二维码扫描示例

    现在二维码的应用越来越普及,二维码扫描也成为手机应用程序的必备功能了.本文将基于 Xamarin.Android 平台使用 ZXing.Net.Mobile  做一个简单的 Android 条码扫描示 ...

  9. Android 手机卫士--解析json与消息机制发送不同类型消息

    本文地址:http://www.cnblogs.com/wuyudong/p/5900800.html,转载请注明源地址. 1.解析json数据 解析json的代码很简单 JSONObject jso ...

随机推荐

  1. C语言 · 高精度加法

    问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储.对于这种问题,一般使用数组来处理. 定义一个数组A ...

  2. 通过adb方式给安卓手机截图的cmd批处理文件

    @echo off rem  通过adb方式截图rem  需要安装adb ,一般安装了android sdk 默认带了adb ,路径为sdk目录的android-sdk\platform-toolsr ...

  3. Jade模板引擎让你飞

    写在前面:现在jade改名成pug了 一.安装 npm install jade 二.基本使用 1.简单使用 p hello jade! 渲染后: <p>hello jade!</p ...

  4. XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法

            在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...

  5. HTML5 语义元素(一)页面结构

    本篇主要介绍HTML5增加的语义元素中关于页面结构方面的,包含: <article>.<aside>.<figure>.<figcaption>.< ...

  6. 深入理解MySql子查询IN的执行和优化

    IN为什么慢? 在应用程序中使用子查询后,SQL语句的查询性能变得非常糟糕.例如: SELECT driver_id FROM driver where driver_id in (SELECT dr ...

  7. ASP.NET Core应用针对静态文件请求的处理[5]: DefaultFilesMiddleware中间件如何显示默认页面

    DefaultFilesMiddleware中间件的目的在于将目标目录下的默认文件作为响应内容.我们知道,如果直接请求的就是这个默认文件,那么前面介绍的StaticFileMiddleware中间件会 ...

  8. .net erp(办公oa)开发平台架构概要说明之表单设计器

    背景:搭建一个适合公司erp业务的开发平台.   架构概要图: 表单设计开发部署示例图    表单设计开发部署示例说明1)每个开发人员可以自己部署表单设计至本地一份(当然也可以共用一套开发环境,但是如 ...

  9. 现代3D图形编程学习-基础简介(3)-什么是opengl (译)

    本书系列 现代3D图形编程学习 OpenGL是什么 在我们编写openGL程序之前,我们首先需要知道什么是OpenGL. 将OpenGL作为一个API OpenGL 通常被认为是应用程序接口(API) ...

  10. Dynamics CRM 之ADFS 使用 WID 的联合服务器场

    使用 WID 的联合服务器场 默认拓扑 Active Directory 联合身份验证服务 (AD FS) 是联合服务器场,使用 Windows 内部数据库 (WID). 在这种拓扑, AD FS 使 ...