首页 技术 正文
技术 2022年11月23日
0 收藏 720 点赞 4,941 浏览 1569 个字

最近在做一个Linux平台上基于ASP.Net 5 中间件+Redis+Mysql架构的系统,研究使用了

StackExchange.Redis 作为asp.net5连接redis的工具。作者在前几天开了一个新的分支“CoreCLR”开始对asp.net5的进行升级开发。并且有一个pull request跟踪相关的问题。在Windows开发机上测试一切都可以正常执行。迁移到Linux上的Docker容器里执行后发现,asp.net5的中间件程序在通过StackExchange.Redis连接本地的redis服务时会发生如下错误:

System.PlatformNotSupportedException: Operation is not supported on this platform.
at System.Net.Sockets.SocketPal.Ioctl(SafeCloseSocket handle, Int32 ioControlCode, Byte[] optionInValue, Byte[] optionOutValue, Int32& optionLength)
at System.Net.Sockets.SocketPal.Ioctl(SafeCloseSocket handle, Int32 ioControlCode, Byte[] optionInValue, Byte[] optionOutValue, Int32& optionLength)
at System.Net.Sockets.Socket.IOControl(Int32 ioControlCode, Byte[] optionInValue, Byte[] optionOutValue)
at StackExchange.Redis.SocketManager.SetFastLoopbackOption(Socket socket)

研究后发现,Github上托管的.Net代码中有这样一段

public static SocketError Ioctl(SafeCloseSocket handle, int ioControlCode, byte[] optionInValue, byte[] optionOutValue, out int optionLength)
{
// TODO: can this be supported in some reasonable fashion?
throw new PlatformNotSupportedException();
}

OK,看来虽然准备实现,但确实还未实现。好吧,暂时自己动手和改下StackExchange.Redis代码。改为:

...
internal SocketToken BeginConnect(EndPoint endpoint, ISocketCallback callback, ConnectionMultiplexer multiplexer, TextWriter log)
{
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try { SetFastLoopbackOption(socket); } catch { }
socket.NoDelay = true;
try
{
...

这是一个暂时的绕过方案,使你至少可以在Linux上跑的asp.net5程序可以顺利连接Redis。缺点是,连接本地Redis服务时,并未使用环回(Loopback)方式,使得原本应该有的本地连接性能提升没有体现出来。相信.net5的Sockets基础类进一步改进后。该性能提升还是会有的。

Technorati 标记: ASP.NET5,.NET跨平台,Redis,Corefx,StackExchange.Redis

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,440
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,857
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,695
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,450
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,096
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,248