ASP.NET CORE API 使用Orleans

这篇具有很好参考价值的文章主要介绍了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 ID
      var shortenedRouteSegment = Guid.NewGuid().GetHashCode().ToString("X");

      // Create and persist a grain with the shortened ID and full URL
      var shortenerGrain = grains.GetGrain<IUrlShortenerGrain>(shortenedRouteSegment);
      await shortenerGrain.SetUrl(path);

      // Return the shortened URL for later use
      var 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

然后对应执行相应需要存储脚本:也就是官网对应的持久化,提醒、集群脚本。文章来源地址https://www.toymoban.com/news/detail-461305.html

到了这里,关于ASP.NET CORE API 使用Orleans的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用asp.net core web api创建web后台,并连接和使用Sql Server数据库

    前言:因为要写一个安卓端app,实现从服务器中获取电影数据,所以需要搭建服务端代码,之前学过C#,所以想用C#实现服务器段代码用于测试,本文使用C#语言,使用asp.net core web api组件搭建服务器端,并访问sql server 数据库。 一、安装Visual studio 2022 社区版,并安装ASP.NET和

    2024年02月14日
    浏览(54)
  • ASP.Net Core Web API结合Entity Framework Core框架(API的创建使用,接口前端权限设置,前端获取API的Get,post方法)(程序包引用以及导入数据库)

    目录 1. Web Api 程序包引用 2. Web Api 的创建与Http类型的介绍 2.1 ASP.Net Core Web API项目的创建 2 .2  API接口的创建 2.3 HttpGet和HttpPost类型的区别 3.接口权限设置 4.HttpGet方法和HttpPOst方法 5.前端中用HttpGet/Poset获取接口数据 6.EF框架——配置数据库链接字符串(即将数据库中的表导入项

    2024年02月08日
    浏览(64)
  • ASP.NET Core Web API用户身份验证

    ASP.NET Core Web API用户身份验证的方法有很多,本文只介绍JWT方法。JWT实现了服务端无状态,在分布式服务、会话一致性、单点登录等方面凸显优势,不占用服务端资源。简单来说,JWT的验证过程如下所示: (1)通过用户名和密码获取一个Token。 (2)访问API时,加上这个Toke

    2024年02月11日
    浏览(48)
  • ASP.NET Core 中的两种 Web API

    ASP.NET Core 有两种创建 RESTful Web API 的方式: 基于 Controller,使用完整的基于ControllerBase的基类定义接口endpoints。 基于 Minimal APIs,使用Lambda表达式定义接口 endpoints。 基于 Controller 的 Web API 可以使用构造函数注入,或者属性注入,遵循面向对象模式。 基于 Minimal APIs 的 Web API 通

    2024年02月09日
    浏览(41)
  • ASP.NET Core Web API 流式返回,逐字显示

    Websocket、SSE(Server-Sent Events)和长轮询(Long Polling)都是用于网页和服务端通信的技术。 Websocket是一种全双工通信协议,能够实现客户端和服务端之间的实时通信。它基于TCP协议,并且允许服务器主动向客户端推送数据,同时也允许客户端向服务器发送数据。 SSE是一种单向

    2023年04月23日
    浏览(50)
  • ASP.NET Core Web API之Token验证

    在实际开发中,我们经常需要对外提供接口以便客户获取数据,由于数据属于私密信息,并不能随意供其他人访问,所以就需要验证客户身份。那么如何才能验证客户的什么呢?今天以一个简单的小例子,简述ASP.NET Core Web API开发过程中,常用的一种JWT身份验证方式。仅供学

    2024年02月11日
    浏览(47)
  • Asp-Net-Core开发笔记:API版本管理

    对于Web API应用程序而言,随着时间的推移以及需求的增加或改变,API必然会遇到升级的需求。事实上,Web API应用程序应该从创建时就考虑到API版本的问题。业务的调整、功能的增加、接口的移除与改名、接口参数变动、实体属性的添加、删除和更改等都会改变API的功能,从

    2024年02月08日
    浏览(46)
  • 2.1 .net 8 ASP.NET Core Web API - Controller详解

    书接上回,上节我们留了几个问题,即: 1、接口Hello的名字究竟怎么来的? 2、我们如果想把接口改成其他的名称,应该怎么做? 3、我们继承ControllerBase,以及[Route(“[controller]”)]属性,又是分别起到什么作用? 需要解决以上几个问题,我们就要继续深入研究Controller相关的

    2024年02月20日
    浏览(47)
  • ASP.NET Core 6 (.NET 6) 快速开发简单登陆和登出功能

    ASP.NET Core 6中的简单登录和登出功能,需要使用身份验证和授权中间件实现, 使用Visual Studio 2022或更高版本开发工具,创建一个ASP.NET Core 6 (.NET 6) 项目,项目添加引用 Microsoft.AspNetCore.Authentication.Cookies ,引用方法可以参考: 1)使用Nuget界面管理器 搜索 \\\"Microsoft.AspNetCore.Authe

    2024年02月21日
    浏览(43)
  • ASP.NET Core 中基于 Controller 的 Web API

    客户端发送Http请求,Contoller响应请求,并从数据库读取数据,序列化数据,然后通过 Http Response返回序列化的数据。 Web API 的所有controllers 一般继承于 ControllerBase 类,而不是Controller 类。 因为 Controller 类也继承自ControllerBase 类,但是支持views,而API一般不需要这个功能。 Co

    2024年02月10日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包