Code Monkey home page Code Monkey logo

rrod's Introduction

RROD - React, Redux, Orleans and Dotnet Core

Exploring a new web architecture

This project is an eploration of next-generation architecture based on Dotnet Core and Javascript. When I started this, it was all very bleeding edge, but I have maintained this repositories as these products matured, and now everything is released and ready for production!

Here is the introductory blogpost. There are follow-up posts on my implementation of Let's Encrypt Certificates, the React, Redux, and Typescript-based frontend, and the Orleans Actor-based backend. I also added Dockerfiles and deployed this solution to a Kubernetes cluster. The config files for that (minus secrets) are in the deploy folder.

This project demonstrates many technologies in context:

Clientside

  • A web front-end with universal/isomorphic rendering, using React 16 and Redux, written in Typescript
  • Bootstrap based UI using react-bootstrap and bootstrap-sass
  • Animations and transitions using ReactTransitionGroup and AnimatedJS
  • Asset pipeline driven by webpack 4, with Hot Module Reloading during development
  • Realtime updates from the server over a SignalR Websocket connection

Web front-end

  • Webserver based on AspNet Core 2.1, running as a standalone executable
  • Automatic request and use of Let's Encrypt TLS certificates on startup
  • AspNet JavascriptServices middleware driving webpack during development (requires node version 8+)
  • AspNet middleware to serve gzip-compressed static assets when possible
  • AspNet Identity using a custom (Orleans based) Identity Store
  • DistributedCache and DataProtection services implemented against Orleans backend
  • Identity Server 4 based authentication
  • Middleware to protect against cross site scripting

Actor back-end

  • Actor-based back-end based on Microsoft Orleans 2.0
  • Using Table Storage for persisting state (install the Azure Storage emulator or configure a 'real' storage connection to run this project)
  • Using Orleans Streams over an Azure Storage Queue for pushing updates from the back-end to subscribers
  • Demo Actor implementing Event Sourcing, re-using the Redux pattern in the backend

Docker / Kubernetes based deployment

  • Use VS Code or Visual Studio for development using a local dotnet environment
  • Dockerfiles and VS Code tasks for local development and debugging using Docker Community Edition
  • Kubernetes Yaml files for deployment to a Kubernetes cluster, such as Azure AKS (add your own configmaps/secrets)

Run it yourself

  1. Install dotnet core 2.1 (or higher) and nodejs 8 (or higher).
  2. Create a secrets.json file, put it in the right place (in Windows, its %AppData%\Roaming\Microsoft\UserSecrets\rrod-secrets\secrets.json, on OSX, it's in ~/.microsoft/usersecrets/rrod-secrets/secrets.json). A storage account first has to be created in Microsoft Azure. On Windows, you can alternatively install the Azure Storage Emulator and put "UseDevelopmentStorage=true" for the storage connection strings. The SMTP connection string is not really necessary. It is possible to configure Orleans with other types of clustering that do not use Azure Storage (such as native Kubernetes Clustering) with a few code changes. The ReduxGrain base class (used for storing users and counter values) is hardcoded against Azure storage and really needs the ReduxConnectionString. The minimum secrets file contains:
{
  "ConnectionStrings": {
    "DataConnectionString": "DefaultEndpointsProtocol=https;AccountName=[AZURE STORAGE ACCOUNT];AccountKey=[STORAGE KEY];EndpointSuffix=core.windows.net",
    "ReduxConnectionString": "DefaultEndpointsProtocol=https;AccountName=[AZURE STORAGE ACCOUNT];AccountKey=[STORAGE KEY];EndpointSuffix=core.windows.net",
    "SmtpConnectionString": "Host=[SMTP HOST];UserName=[SMTP USERNAME];Password=[SMTP PASSWORD]"
  },
  "AcmeSettings": {
    "EmailAddress": "[YOUR EMAIL]",
    "PfxPassword": "[A RANDOM PASSWORD]"
  }
}
  1. in src/OrleansHost, run dotnet run
  2. in src/Webapp, run npm install (or yarn), then dotnet run

Using VS Code or Visual Studio you can also do this from inside the IDE.

Disclaimer

This code should be considered experimental. It works, however the project may have rough edges and has not been thoroughly tested. I welcome feedback!

-- Maarten

rrod's People

Contributors

maarten88 avatar mo-esmp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rrod's Issues

Constructor Errors with Footer.tsx, Login.tsx, and scroll-effect.tsx

Thanks for putting this project together. It looks like a great way for me to learn more about each of these technologies. Having problems getting it to run, though. Getting the following error in the constructor for the components footer, login, and scroll-effect .tsx files. Details shown in attached screenshot image.

Error TS2554 (TS) Expected 1-2 arguments, but got 0. Webapp (tsconfig project)

Also have those errors as shown in the screenshoton the HOCBBaseRender.tsx file, looks like the .tsx file expects React to have a default export, but React ( at least the version being used by this project in my environment) does not....

image

Would appreciate your insights on how to correct these issues.

Developing on Windows 10 Pro, Visual Studio 2017 V15.5.2, Node V8.9.3, npm 5.6.0

instructions wasn't working

Great work first of all, but in your blog, you've mentioned to do


dotnet restore
dotnet build
dotnet run

on the OrleansHost then webapp. I'm trying this out on a OSX with latest donet core 2.0.3. i skipped the dotnet run part, and instead used VS Code with launch Launch & Debug All, there's HotModuleReplacement errors, and realised that i need to run npm i on WebApp dir first to download the node modules before npm run build:debug

You've also mentioned that you chose dot net core as you wanted XPlat capabilities, but having ReduxTableStorage having a Azure Storage Emulator kinda defeats the purpose.

HMR Typescript errors

Hello - thanks for such a lovely tutorial! I was attempting to run your solution and am receiving the following errors, do you know what I might be able to do to resolve?

[HMR] bundle has 8 errors
client.js:161 [at-loader] ./ClientApp/boot-client.tsx:24:6
TS2604: JSX element type 'Provider' does not have any construct or call signatures.
[at-loader] ./ClientApp/boot-server.tsx:45:18
TS2604: JSX element type 'Provider' does not have any construct or call signatures.
[at-loader] ./ClientApp/components/Home.tsx:10:13
TS2322: Type '{}' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; } & void'.
Type '{}' is not assignable to type 'void'.
[at-loader] ./ClientApp/store/Contact.ts:79:14
TS2322: Type '(state: ContactState, action: KnownAction) => ContactState' is not assignable to type 'Reducer'.
Types of parameters 'action' and 'action' are incompatible.
Type 'A' is not assignable to type 'KnownAction'.
Type 'Action' is not assignable to type 'KnownAction'.
Type 'Action' is not assignable to type 'SubmitContactFormAction'.
Property 'payload' is missing in type 'Action'.
Type 'A' is not assignable to type 'ContactFormErrorAction'.
Type 'Action' is not assignable to type 'ContactFormErrorAction'.
Property 'payload' is missing in type 'Action'.
[at-loader] ./ClientApp/store/Session.ts:53:14
TS2322: Type '(state: SettingsState, action: InitConfigAction) => SettingsState' is not assignable to type 'Reducer'.
Types of parameters 'action' and 'action' are incompatible.
Type 'A' is not assignable to type 'InitConfigAction'.
Type 'Action' is not assignable to type 'InitConfigAction'.
Property 'payload' is missing in type 'Action'.
[at-loader] ./node_modules/@types/react-redux/index.d.ts:179:31
TS2314: Generic type 'Component<P, S>' requires 2 type argument(s).
[at-loader] ./node_modules/@types/react-router/lib/withRouter.d.ts:3:99
TS2314: Generic type 'PureComponent<P, S>' requires 2 type argument(s).
[at-loader] ./node_modules/@types/react/index.d.ts:165:11
TS2559: Type 'Component<P, S>' has no properties in common with type 'ComponentLifecycle<P, S>'.

Webpack 4 issue

There is an issue with aspnet-webpack for this project.
I get following error when I run dotnet run in Webapp folder,
right after it successfully connects to silo host.
Microsoft.AspNetCore.NodeServices[0] (node:6608) DeprecationWarning: Tapable.plugin is deprecated. Use new API on .hooks instead

Stack trace:
Shared (\rrod\src\Webapp\node_modules\webpack-dev-middleware\lib\Shared.js:233:19) at module.exports (\rrod\src\Webapp\node_modules\webpack-dev-middleware\middleware.js:22:15) at attachWebpackDevMiddleware (\rrod\src\Webapp\node_modules\aspnet-webpack\WebpackDevMiddleware.js:69:46) at \rrod\src\Webapp\node_modules\aspnet-webpack\WebpackDevMiddleware.js:248:21 at Array.forEach (<anonymous>) at Server.<anonymous> (\rrod\src\Webapp\node_modules\aspnet-webpack\WebpackDevMiddleware.js:211:32) at Object.onceWrapper (events.js:313:30) at emitNone (events.js:106:13) at Server.emit (events.js:208:7) at emitListeningNT (net.js:1394:10) at _combinedTickCallback (internal/process/next_tick.js:135:11) at process._tickCallback (internal/process/next_tick.js:180:9)

Deploying

Hey there, thanks for your blog posts. I wanted to try out your project but havin some trouble to set it up.
I keep getting errors that node --debug is deprecated and your Dockerfile ist missing the project.json file.. apparently this file is depereacted too...
Can you please tell what to do with the current .net Core and Node Version ?

Permission denied

Hello,

Can certificate fetching approach be used for shared hosting? I am deploying to the websites (IIS entries) and binding to port 80 wont work there as it was failing on my local computer when I had local IIS running.

Also, after stopping IIS locally I am getting this exception at
var account = await client.NewRegistraton($"mailto:{acmeSettings.EmailAddress}");

Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Uri' because the type requires a JSON primitive value (e.g. string, number, boolean, null) to deserialize correctly.
To fix this error either change the JSON to a JSON primitive value (e.g. string, number, boolean, null) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
Path 'meta.terms-of-service', line 4, position 23.

Thanks.

Webapp stuck in a black screen due to Orleans client

First of all thanks for this great project. I figure that this is something I'm doing incorrectly, or something to do with my local machine. I really liked your project and was trying to get it to run but I am stuck on an error that leads to the site not displaying on the browser (black page).

I believe that I followed your instructions correctly. I'm on Windows 10 Pro running VS Pro as well. Azure Compute Emulator is installed and status reported running. I ran the Orleans project that has the following output which looks correct to me:

warn: Orleans.Runtime.NoOpHostEnvironmentStatistics[100708]
      No implementation of IHostEnvironmentStatistics was found. Load shedding will not work yet
Silo starting...
warn: Orleans.Runtime.Scheduler *stg/15/0000000f.WorkItemGroup[101215]
      Task [Id=115, Status=RanToCompletion] in WorkGroup [SystemTarget: S169.254.23.149:11111:269795451*stg/15/0000000f@S0000000f] took elapsed time 0:00:00.265158 for execution, which is longer than 00:00:00.2000000. Running on thread <Runtime.Scheduler.WorkerPoolThread/System.5, ManagedThreadId=11, Executing Task Id=115 Status=RanToCompletion for 00:00:00.2694900 on WorkItem=System*WorkItemGroup:Name=*stg/15/0000000f,WorkGroupStatus=Running Executing for 00:00:00.2704802. .>
warn: Orleans.Runtime.MembershipService.MembershipOracleData[100619]
      Detected older version of myself - Marking other older clone as Dead -- Current Me=S169.254.23.149:11111:269795451 Older Me=S169.254.23.149:11111:269794538, Old entry= SiloAddress=S169.254.23.149:11111:269794538 SiloName=Silo_e44fa Status=Active
warn: Orleans.Runtime.Scheduler.WorkItemGroup[101215]
      Task [Id=2327, Status=RanToCompletion] in WorkGroup [LowPrioritySystemTarget: S169.254.23.149:11111:269795451*stg/0/00000000@S00000000] took elapsed time 0:00:00.3239865 for execution, which is longer than 00:00:00.2000000. Running on thread <Runtime.Scheduler.WorkerPoolThread/3, ManagedThreadId=15, Executing Task Id=2327 Status=RanToCompletion for 00:00:00.3240319 on WorkItem=System*WorkItemGroup:Name=*stg/0/00000000,WorkGroupStatus=Running Executing for 00:00:00.3240356. .>
Silo started
warn: Orleans.Runtime.Scheduler.WorkItemGroup[101215]
      Task [Id=29753, Status=RanToCompletion] in WorkGroup [LowPrioritySystemTarget: S169.254.23.149:11111:269795451*stg/16570737466226579113/14b116a9@S14b116a9] took elapsed time 0:00:00.2406182 for execution, which is longer than 00:00:00.2000000. Running on thread <Runtime.Scheduler.WorkerPoolThread/2, ManagedThreadId=14, Executing Task Id=29753 Status=RanToCompletion for 00:00:00.2406636 on WorkItem=System*WorkItemGroup:Name=*stg/16570737466226579113/14b116a9,WorkGroupStatus=Running Executing for 00:00:00.2407063. .>

Following that, I've run the Webapp project (previously npm install for node dependencies). It seems that it spends the seven attempts to create the Orleans client and connect and then fails with the following message:

Orleans.Runtime.SiloUnavailableException: 'The target silo became unavailable for message: Request *cli/5db875b2@3e52c293->S169.254.23.149:30000:269795451*stg/17/00000011@S00000011 #9: . Target History is: <S169.254.23.149:30000:269795451:*stg/17/00000011:@S00000011>. See https://aka.ms/orleans-troubleshooting for troubleshooting help.'

Some additional logs from the console output:

Orleans.OutsideRuntimeClient:Information: OutsideRuntimeClient.ConstructorReset(): client Id *cli/5db875b2
Exception thrown: 'Orleans.Runtime.SiloUnavailableException' in System.Private.CoreLib.dll
An unhandled exception of type 'Orleans.Runtime.SiloUnavailableException' occurred in System.Private.CoreLib.dll
The target silo became unavailable for message: Request *cli/5db875b2@3e52c293->S169.254.23.149:30000:269795451*stg/17/00000011@S00000011 #9: . Target History is: <S169.254.23.149:30000:269795451:*stg/17/00000011:@S00000011>. See https://aka.ms/orleans-troubleshooting for troubleshooting help.

The thread 0x4c64 has exited with code 0 (0x0).
The thread 0x4b3c has exited with code 0 (0x0).
The thread 0x780 has exited with code 0 (0x0).
The thread 0x2a84 has exited with code 0 (0x0).
The thread 0x8d0 has exited with code 0 (0x0).
The thread 0x52a0 has exited with code 0 (0x0).
The thread 0x4554 has exited with code 0 (0x0).
The thread 0x24a4 has exited with code 0 (0x0).
The thread 0x4938 has exited with code 0 (0x0).
The thread 0x380c has exited with code 0 (0x0).
Orleans.Runtime.Watchdog:Warning: .NET Runtime Platform stalled for 00:04:47.0377451 - possibly GC? We are now using total of 17MB memory. gc=10, 3, 2
The thread 0xc94 has exited with code 0 (0x0).
The thread 0x4f04 has exited with code 0 (0x0).
The thread 0x32a0 has exited with code 0 (0x0).
The thread 0x3ff8 has exited with code 0 (0x0).
The thread 0x4670 has exited with code 0 (0x0).
The thread 0x4de8 has exited with code 0 (0x0).
The thread 0x48b8 has exited with code 0 (0x0).
The thread 0x5220 has exited with code 0 (0x0).
The thread 0x4648 has exited with code 0 (0x0).
Orleans.Messaging.ClientMessageCenter:Error: Unexpected error getting an inbound message

System.ArgumentNullException: Value cannot be null.
   at System.Threading.Monitor.ReliableEnter(Object obj, Boolean& lockTaken)
   at System.Threading.SemaphoreSlim.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Collections.Concurrent.BlockingCollection`1.TryTakeWithNoTimeValidation(T& item, Int32 millisecondsTimeout, CancellationToken cancellationToken, CancellationTokenSource combinedTokenSource)
   at System.Collections.Concurrent.BlockingCollection`1.TryTake(T& item, Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Collections.Concurrent.BlockingCollection`1.Take()
   at Orleans.Messaging.ClientMessageCenter.WaitMessage(Categories type, CancellationToken ct) in D:\build\agent\_work\18\s\src\Orleans.Core\Messaging\ClientMessageCenter.cs:line 335
The thread 0x2d44 has exited with code 0 (0x0).
The thread 0x4c38 has exited with code 0 (0x0).
Orleans.Runtime.GrainTimer:Warning: -GrainTimer.Membership.ProbeTimer. TimerCallbackHandler:Orleans.Runtime.GrainTimer+<>c__DisplayClass16_0->System.Threading.Tasks.Task <FromTimerCallback>b__0(System.Object) did not fire on time. Last fired at 2018-07-20 15:13:06.605 GMT, 00:04:50.6394494 since previous fire, should have fired after 00:00:10.
Orleans.Runtime.GrainTimer:Error: Watchdog Freeze Alert: Orleans.Runtime.asynTask.SafeTimerBase.Membership.ReadTableTimer did not fire on time. Last fired at 2018-07-20 15:12:31.041 GMT, 00:05:26.2050718 since previous fire, should have fired after 00:01:00.
Orleans.Runtime.GrainTimer:Warning: -GrainTimer.Membership.ReadTableTimer. TimerCallbackHandler:Orleans.Runtime.GrainTimer+<>c__DisplayClass16_0->System.Threading.Tasks.Task <FromTimerCallback>b__0(System.Object) did not fire on time. Last fired at 2018-07-20 15:12:31.041 GMT, 00:05:26.2147821 since previous fire, should have fired after 00:01:00.
Orleans.Runtime.GrainTimer:Error: Watchdog Freeze Alert: Orleans.Runtime.asynTask.SafeTimerBase.Membership.ProbeTimer did not fire on time. Last fired at 2018-07-20 15:13:06.605 GMT, 00:04:50.6518612 since previous fire, should have fired after 00:00:10.
Orleans.Runtime.GrainTimer:Error: Watchdog Freeze Alert: Orleans.Runtime.asynTask.SafeTimerBase.Membership.IAmAliveTimer did not fire on time. Last fired at 2018-07-20 15:10:57.371 GMT, 00:06:59.9056191 since previous fire, should have fired after 00:05:00.
The program '[19540] dotnet.exe' has exited with code 0 (0x0).
Orleans.Runtime.Watchdog:Warning: Watchdog had 1 Health Check Failure(s) out of 2 Health Check Participants.
Orleans.Runtime.GrainTimer:Warning: -GrainTimer.Membership.IAmAliveTimer. TimerCallbackHandler:Orleans.Runtime.GrainTimer+<>c__DisplayClass16_0->System.Threading.Tasks.Task <FromTimerCallback>b__0(System.Object) did not fire on time. Last fired at 2018-07-20 15:10:57.371 GMT, 00:06:59.9171037 since previous fire, should have fired after 00:05:00.
Orleans.Runtime.Scheduler.WorkItemGroup:Warning: Task [Id=229785, Status=RanToCompletion] in WorkGroup [LowPrioritySystemTarget: S169.254.23.149:11111:269795451*stg/16570737466226579113/14b116a9@S14b116a9] took elapsed time 0:00:00.2081952 for execution, which is longer than 00:00:00.2000000. Running on thread <Runtime.Scheduler.WorkerPoolThread/3, ManagedThreadId=15, Executing Task Id=229785 Status=RanToCompletion for 00:00:00.2082481 on WorkItem=System*WorkItemGroup:Name=*stg/16570737466226579113/14b116a9,WorkGroupStatus=Running Executing for 00:00:00.2082857. .>
The program '[15664] dotnet.exe' has exited with code -1 (0xffffffff).

Maybe you've run into this in the past and can shed some light on this. I've got experience with asp.net core and react/redux but not with orleans. Thanks in advance.

Prerendering failed

Hello Maarten,

I am getting the fallowing error after running the Webapp

NodeInvocationException: Prerendering failed because of error: C:\Users\...\rrod\src\Webapp\ClientApp\dist\main-server.js:2251
return (async () => {
^
SyntaxError: Unexpected token (

why source code in libs?

Hi Maarten,
Thanks for sharing your work!

I've been working with asp.net core for a while, but very interested in learning orleans, react, redux stack.

In studying the code in this solution, was wondering why the lib folder has source code for things like MailKit/MimeKit/BouncyCastle when there exist .net core compatible nugets for those things?

Thanks,

Joe

Unhandled exception when

Hi, thanks for this interesting project. I'm afraid I can't seem to get it to work though. I get the following error after running the application:

An unhandled exception occurred while processing the request.

NodeInvocationException: Prerendering failed because of error: An unhandled exception occurred while processing the request.

NodeInvocationException: Prerendering failed because of error: C:\Users\...\src\Webapp\ClientApp\dist\main-server.js:2251
return (async () => {
^
SyntaxError: Unexpected token (
at createScript (vm.js:56:10)
at Object.runInThisContext (vm.js:97:10)
at Module._compile (module.js:542:28)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at findBootModule (C:\Users\...\AppData\Local\Temp\m0y3ntco.ru5:111:17)
Current directory is: C:\Users\...\src\Webapp

Running webpack for the Webapp doesn't throw any errors though.

Error building silo host: The requested address is not valid in its context

Hi, after following the pointers in the 'Run it yourself' part of the readme I get the following exception when trying to run OrleansHost:

warn: Orleans.Runtime.NoOpHostEnvironmentStatistics[100708]
      No implementation of IHostEnvironmentStatistics was found. Load shedding will not work yet
Error building silo host: The requested address is not valid in its context

Unhandled Exception: System.Net.Sockets.SocketException: The requested address is not valid in its context
   at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, String callerName)
   at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Bind(EndPoint localEP)
   at Orleans.Runtime.SocketManager.GetAcceptingSocketForEndpoint(IPEndPoint address)
   at Orleans.Runtime.Messaging.IncomingMessageAcceptor..ctor(MessageCenter msgCtr, IPEndPoint here, SocketDirection socketDirection, MessageFactory messageFactory, SerializationManager serializationManager, ExecutorService executorService, ILoggerFactory loggerFactory)
   at Orleans.Runtime.Messaging.MessageCenter.Initialize(IOptions`1 endpointOptions, IOptions`1 messagingOptions, IOptions`1 networkingOptions)
   at Orleans.Runtime.Messaging.MessageCenter..ctor(ILocalSiloDetails siloDetails, IOptions`1 endpointOptions, IOptions`1 messagingOptions, IOptions`1 networkingOptions, SerializationManager serializationManager, MessageFactory messageFactory, Factory`2 gatewayFactory, ExecutorService executorService, ILoggerFactory loggerFactory)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitSingleton(SingletonCallSite singletonCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass22_0.<RealizeService>b__0(ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
   at Orleans.Runtime.Silo..ctor(ILocalSiloDetails siloDetails, IServiceProvider services)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitSingleton(SingletonCallSite singletonCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitSingleton(SingletonCallSite singletonCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass22_0.<RealizeService>b__0(ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
   at OrleansHost.Program.<Main>d__1.MoveNext() in D:\dev\Maarten88\rrod\src\OrleansHost\Program.cs:line 93
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at OrleansHost.Program.<Main>(String[] args)

I'm running the azure storage emulator, with status output:

Windows Azure Storage Emulator 5.4.0.0 command line tool
IsRunning: True
BlobEndpoint: http://127.0.0.1:10000/
QueueEndpoint: http://127.0.0.1:10001/
TableEndpoint: http://127.0.0.1:10002/

Very impressive

This was hard to find. But am glad I did.
Thank you for the extensive and impressive effort on this project.

Planning to try it out for an internal only employee application, will contribute if necessary, but mostly wanted to express my thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.