XAMARIN.ANDROID SIGNALR 实时消息接收发送示例
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 实时消息接收发送示例的更多相关文章
- WebForm SignalR 实时消息推送
原文:https://www.jianshu.com/p/ae25d0d77011 官方文档:https://docs.microsoft.com/zh-cn/aspnet/signalr/ 实现效果 ...
- [置顶]
Xamarin android如何调用百度地图入门示例(一)
在Xamarin android如何调用百度地图呢? 首先我们要区分清楚,百度地图这是一个广泛的概念,很多刚刚接触这个名词"百度地图api",的确是泛泛而谈,我们来看一下百度地图的 ...
- ActiveMQ 实现消息接收发送
一.接收者 package com.demo.initservice; import javax.jms.Connection; import javax.jms.ConnectionFactory; ...
- .netcore signalR 实时消息推送
服务器端引入包 Install-Package Microsoft.AspNetCore.SignalR客户端引入包 npm install @aspnet/signalr <template ...
- [置顶]
Xamarin android中使用signalr实现即时通讯
前面几天也写了一些signalr的例子,不过都是在Web端,今天我就来实践一下如何在xamarin android中使用signalr,刚好工作中也用到了这个,也算是总结一下学到的东西吧,希望能帮助你 ...
- SignalR在Xamarin Android中的使用
原文:SignalR在Xamarin Android中的使用 ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 ...
- 探索 OpenStack 之(15):oslo.messaging 和 Cinder 中 MessageQueue 消息的发送和接收
前言:上一篇文章 只是 RabbitMQ 的科普,本文将仔细分析 Cinder 中 RabbitMQ 的各组件的使用.消息的发送和接收等.由于各流程步骤很多,本文只会使用若干流程图来加以阐述,尽量做到 ...
- XAMARIN ANDROID 二维码扫描示例
现在二维码的应用越来越普及,二维码扫描也成为手机应用程序的必备功能了.本文将基于 Xamarin.Android 平台使用 ZXing.Net.Mobile 做一个简单的 Android 条码扫描示 ...
- Android 手机卫士--解析json与消息机制发送不同类型消息
本文地址:http://www.cnblogs.com/wuyudong/p/5900800.html,转载请注明源地址. 1.解析json数据 解析json的代码很简单 JSONObject jso ...
随机推荐
- Asp.Net Mvc 使用WebUploader 多图片上传
来博客园有一个月了,哈哈.在这里学到了很多东西.今天也来试着分享一下学到的东西.希望能和大家做朋友共同进步. 最近由于项目需要上传多张图片,对于我这只菜鸟来说,以前上传图片都是直接拖得控件啊,而且还是 ...
- npm 私有模块的管理使用
你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...
- HTTP协议系列(1)
一.为什么学习Http协议 首先明白我们为什么学习HTTP协议,也就是说明白HTTP协议的作用.HTTP协议是用于客户端与服务器之间的通讯.明白了HTTP协议的作用也就知道了为什么要学习H ...
- python开发编译器
引言 最近刚刚用python写完了一个解析protobuf文件的简单编译器,深感ply实现词法分析和语法分析的简洁方便.乘着余热未过,头脑清醒,记下一点总结和心得,方便各位pythoner参考使用. ...
- 通往全栈工程师的捷径 —— react
腾讯Bugly特约作者: 左明 首先,我们来看看 React 在世界范围的热度趋势,下图是关键词“房价”和 “React” 在 Google Trends 上的搜索量对比,蓝色的是 React,红色的 ...
- mybatis_映射查询
一.一对一映射查询: 第一种方式(手动映射):借助resultType属性,定义专门的pojo类作为输出类型,其中该po类中封装了查询结果集中所有的字段.此方法较为简单,企业中使用普遍. <!- ...
- Consul 服务注册与服务发现
上一篇:Mac OS.Ubuntu 安装及使用 Consul 1. 服务注册 对 Consul 进行服务注册之前,需要先部署一个服务站点,我们可以使用 ASP.NET Core 创建 Web 应用程序 ...
- 28个你必须知道的HTML5的新特性,技巧以及技术
崭新新的页面布局 传统的: HTML5: 1. 新的Doctype 尽管使用<!DOCTYPE html>,即使浏览器不懂这句话也会按照标准模式去渲染 2. Figure元素 用<f ...
- Oracle 分页
--1:无ORDER BY排序的写法.(效率最高) --(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT ...
- 【QQ红包】手机发抢不到的口令红包
这方法95%的人都抢不了 在QQ输入框输入一个表情,例如:阴险那个表情 将表情剪切到口令红包的口令里 这时候口令里的那个表情表情变成了符号 将符号删去一格,然后全选.复制 然后返回到QQ输入框粘贴 然 ...