当前位置: 首页 > news >正文

ASP.NET CORE API 使用Orleans

快速使用Monimal API 快速集成Orleans 微软官网地址如下:

https://learn.microsoft.com/zh-cn/dotnet/orleans/quickstarts/build-your-first-orleans-app?source=recommendations&tabs=visual-studio

当然它的存储grain存储采用的是内存级别存储,我缓存了mssql 存储。如果是内存存储使用如下代码就Ok

 siloBuilder.AddMemoryGrainStorage("urls");

我采用的是数据库存储:

siloBuilder.AddAdoNetGrainStorage("OrleansStorage", options =>{options.Invariant = "System.Data.SqlClient";options.ConnectionString = "Server=.;Database=OrleansStorage;Persist Security Info=True;User ID=sa;password=Sasa123;";});

当然这过程中需要引入的库如下:

Microsoft.Orleans.Persistence.AdoNet: ado.net存储

Microsoft.Orleans.Server :orleans 开启服务

System.Data.SqlClient :ado 操作数据库驱动程序,ado.net 开发使用库

Program.cs 完整代码如下:

using Microsoft.AspNetCore.Http.Extensions;
using Orleans.Runtime;
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseOrleans(siloBuilder =>
{siloBuilder.UseLocalhostClustering();//siloBuilder.AddMemoryGrainStorage("urls");siloBuilder.AddAdoNetGrainStorage("OrleansStorage", options =>{options.Invariant = "System.Data.SqlClient";options.ConnectionString = "Server=.;Database=OrleansStorage;Persist Security Info=True;User ID=sa;password=Sasa123;";});});// Add services to the container.
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();var app = builder.Build();// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{app.UseSwagger();app.UseSwaggerUI();
}app.MapGet("/", () => "Hello World!");app.MapGet("/shorten/{*path}",async (IGrainFactory grains, HttpRequest request, string path) =>{// Create a unique, short IDvar shortenedRouteSegment = Guid.NewGuid().GetHashCode().ToString("X");// Create and persist a grain with the shortened ID and full URLvar shortenerGrain = grains.GetGrain<IUrlShortenerGrain>(shortenedRouteSegment);await shortenerGrain.SetUrl(path);// Return the shortened URL for later usevar resultBuilder = new UriBuilder(request.GetEncodedUrl()){Path = $"/go/{shortenedRouteSegment}"};return Results.Ok(resultBuilder.Uri);});app.MapGet("/go/{shortenedRouteSegment}",async (IGrainFactory grains, string shortenedRouteSegment) =>{// Retrieve the grain using the shortened ID and redirect to the original URL        var shortenerGrain = grains.GetGrain<IUrlShortenerGrain>(shortenedRouteSegment);var url = await shortenerGrain.GetUrl();return Results.Redirect(url);});app.Run();#region grain 粒度
/// <summary>
/// grain 接口 粒度
/// </summary>
public interface IUrlShortenerGrain : IGrainWithStringKey
{Task SetUrl(string fullUrl);Task<string> GetUrl();
}public class UrlShortenerGrain : Grain, IUrlShortenerGrain
{private readonly IPersistentState<UrlDetails> _state;public UrlShortenerGrain([PersistentState(stateName: "url",storageName: "urls")]IPersistentState<UrlDetails> state){_state = state;}public async Task SetUrl(string fullUrl){_state.State = new UrlDetails(){ShortenedRouteSegment = this.GetPrimaryKeyString(),FullUrl = fullUrl};await _state.WriteStateAsync();}public Task<string> GetUrl(){return Task.FromResult(_state.State.FullUrl);}
}[GenerateSerializer]
public record UrlDetails
{public string FullUrl { get; set; }public string ShortenedRouteSegment { get; set; }
}#endregion 

特别注意如果是需要数据库存储:除了加入上面包外,还需要执行相应脚本,脚本到微软官网地址找:

https://learn.microsoft.com/zh-cn/dotnet/orleans/host/configuration-guide/adonet-configuration 当然需要自己按数据库配置链接建立一个空库,然后执行对应SQL脚本。否则会运行报错

然后对应执行相应需要存储脚本:也就是官网对应的持久化,提醒、集群脚本。

相关文章:

ASP.NET CORE API 使用Orleans

快速使用Monimal API 快速集成Orleans 微软官网地址如下&#xff1a;https://learn.microsoft.com/zh-cn/dotnet/orleans/quickstarts/build-your-first-orleans-app?sourcerecommendations&tabsvisual-studio当然它的存储grain存储采用的是内存级别存储&#xff0c;我缓存…...

《论文阅读》软化标签(将one-hot编码转变为grayscale标签)

《论文阅读》The Emotion is Not One-hot Encoding: Learning with Grayscale Label for Emotion Recognition in Conversation 前言简介相关知识grayscale label模型方法CategoryWord-EmbeddingSelfSelf-AdjustFuture-Self损失实验结果前言 你是否也对于理解论文存在困惑? …...

keras图片数字识别入门AI机器学习

通过使用mnist&#xff08;AI界的helloworld&#xff09;手写数字模型训练集&#xff0c;了解下AI工作的基本流程。 本例子&#xff0c;要基于mnist数据集&#xff08;该数据集包含了【0-9】的模型训练数据集和测试数据集&#xff09;来完成一个手写数字识别的小demo。 mnist…...

使用qt编写一个程序,伪造一个ip访问一个网站。

你好&#xff0c;这是Bing。&#x1f60a; 根据网络搜索结果&#xff0c;使用qt编写一个程序&#xff0c;伪造一个ip访问一个网站的方法可能有以下几种&#xff1a; - 使用X-Forwarded-For请求头来伪造客户端的真实ip地址。这种方法需要在发送请求时添加X-Forwarded-For: 伪造…...

探访人工智能领跑者:纷享销客携手30+TOP高科技企业走进旷视科技

拥有全球规模领先的计算机视觉研究院&#xff1b; 揽获28项世界顶级AI竞赛冠军&#xff1b; 世界级人工智能公司&#xff1b; 没错&#xff0c;它就是人工智能行业的务实者和领跑者&#xff0c;旷视科技。 3月3日&#xff0c;北京软件和信息服务业协会联合纷享销客&#xff0c;…...

UTC、TimeZone、TimeStamp

UTC &#xff1a;Universal Time Coordinated&#xff0c;世界协调时&#xff0c;又称世界标准时间。与UTC time对应的是各个时区的local time&#xff0c;东N区的时间比UTC时间早N个小时&#xff0c;因此UTC time N小时 即为东N区的本地时间&#xff1b;而西N区时间比UTC时间…...

探究SMC局部代码加密技术以及在CTF中的运用

前言 近些日子在很多线上比赛中都遇到了smc文件加密技术,比较出名的有Hgame杭电的比赛,于是我准备实现一下这项技术&#xff0c;但是在网上看了很多文章&#xff0c;发现没有讲的特别详细的&#xff0c;或者是无法根据他们的方法进行实现这项技术&#xff0c;因此本篇文章就是…...

免费集装箱箱号识别API,人工智能企业CIMCAI集装箱识别检测人工智能平台全球4千企业用户,支持API集成二次开发人工智能企业

免费集装箱箱号识别API&#xff0c;人工智能企业CIMCAI集装箱识别检测人工智能平台全球4千企业用户&#xff0c;支持API集成二次开发。箱信息识别及铅封号识别功能免费&#xff0c;顶尖AI集装箱识别率99.98%&#xff0c;全球No.1集装箱人工智能企业CIMCAI打造。中国上海人工智能…...

pdf多页合并为一页方法总结,你觉得哪个最好?

PDF格式的文件在现代办公中是不可或缺的&#xff0c;许多人在工作中需要频繁处理PDF文档。然而&#xff0c;当我们需要阅读多个PDF文件时&#xff0c;不断切换不同的文件并一个一个地打开查阅会非常麻烦。为了提高阅读效率&#xff0c;人们一般会将pdf多页合并为一页。那么&…...

每日一读【基金/股票投资的常识和纪律】

个人投资的几点总结&#xff0c;我时常拿来阅读&#xff0c;警示自己: &#xff0a;基于常识&#xff0c;独立思考。 &#xff0a;投资以年为单位&#xff0c;5年一周期。 &#xff0a;下跌时的信心比金子还贵&#xff0c;永远要记住&#xff1a;风险是涨上去的&#xff0c;机会…...

阶段二12_面向对象高级_继承3

知识点内容&#xff1a; 抽象类 模板设计模式 final关键字 一.抽象类 (1)抽象类概述 抽象方法&#xff1a;将共性的行为&#xff08;方法&#xff09;抽取到父类之后&#xff0c;发现该方法的实现逻辑 无法在父类中给出具体明确&#xff0c;该方法就可以定义为抽象方法。 抽…...

C++ STL:string类的概述及常用接口说明

目录 一. 什么是STL 二. string类的概述 三. string类的常用接口说明 3.1 字符串对象创建相关接口&#xff08;构造函数&#xff09; 3.2 字符串长度和容量相关接口 3.3 字符访问相关接口函数 3.4 字符串删改相关接口函数 3.5 字符查找和子串相关接口函数 3.6 迭代器相…...

java Math类 和 System类 详解(通俗易懂)

Math类介绍Math类常用方法及演示System类简介System类常用方法及演示一、前言本节内容是我们《API-常用类》专题的第四小节了。本节内容主要讲Math类和System类&#xff0c; 内容包括Math类介绍、Math类常用方法、System类介绍&#xff0c;System类常用方法。该小节内容基本不涉…...

软件回归测试是什么?

一、软件回归测试是什么? 软件回归测试作为软件生命周期的一个组成部分&#xff0c;在整个软件测试过程中占有很大的工作量比重&#xff0c;软件开发的各个阶段都会进行多次回归测试。回归测试是指修改了旧代码后&#xff0c;重新进行测试以确认修改没有引入新的错误或导致其…...

TwinCAT3中ModbusTCP Server和C# Client连接

目录 一、硬件环境 1、设置PLC的ip地址 2、ModbusTCP软件安装 3、PLC操作系统防火墙设置 4、网络助手连接PLC 二、创建PLC工程 1、创建寄存器读写变量 2、添加ModbusTCP授权 3、激活和运行工程 三、ModbusTCP数据协议说明 1、写单个寄存器 2、读寄存器 &#xff08;1&…...

【上传项目代码到Git详细步骤】

1.下载安装Git到电脑上&#xff08;这里我之前已经安装好了&#xff0c;就不细说了&#xff09;2.进入控制台安装好后右键点击桌面空白部分会多出两个菜单选项&#xff0c;点击第二个Git Bash Here&#xff08;点击第一个你会爆炸&#xff09;会弹出一个git控制台&#xff0c;如…...

C++回顾(十五)—— 类模板

15.1 为什么要有类模板 类模板用于实现类所需数据的类型参数化类模板在表示如数组、表、图等数据结构显得特别重要&#xff0c;这些数据结构的表示和算法不受所包含的元素类型的影响 15.2 单个类模板语法 注意&#xff1a;类模板的创建对象一定要显示调用&#xff08;指明类型…...

【JavaEE初阶】第四节.文件操作 和 IO (下篇)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言三、文件内容的操作 3.1 读文件 3.1.1 使用字节流读文件 3.2 写文件 3.2.1 使用字节流写文件 …...

华为OD机试用Python实现 -【分解质因数】 2023Q1A

华为OD机试题 本篇题目:分解质因数题目示例 1输入输出示例 2输入输出Code代码编写思路最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南...

博客项目

文章目录1. 创建项目2. 数据库设计3. 前置任务3.1 拦截器3.2 统一数据格式3.3 创建一个 Constant3.4 统一异常处理3.5 密码加密4. 功能实现4.1 登录功能4.2 注册功能4.3 博客列表页 &#xff08;功能实现&#xff09;4.3.1 左侧框4.3.2 右侧框 (分页功能 页面显示)4.4 博客详情…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...