Did you already had time to had a look on your related code parts ? :)
thks !
Indeed, TCP Server-Client communication must be fault-tolerant ;)
I already have implemented my own mecanism to retrieve data loss, based on a company logic. It's a custom mecanism; since tcp server can be from all over the world with shitty connections sometimes (asia -> EU). (FYI, each tcp server write its own sent flux in local files. I never loss data; if the flux is shut down, I can retrieve local files)
I could integrate this mecanism in my 1st solution (tcp client in IIS), but if it avoid me to call this mecanism each days (thks to a Windows service) ; i'll do it, for reliability purposes.
I had a look on RabbitMQ, quite interesting Framework.
I think that's not a best practice to inject a tcp listener 24h/24 without interruption in a IIS process; even if I successfuly did it like you said. (if I restart it each day, there can be a data loss)
I'll try the other practice, an Windows service containing tcp listener, WebAPI (specific port), & abp module zero integration.
for that, i struggle a little bit; i created a ConsoleApp with SelfAPI web host, which works fine. I try to integrate Abp into this project, but i can't get the WebAPI accessible from my browser.
I suppose that's because I need to inject routes into HttpSelfHostServer.
if it's that, do you know how to inject Dynamic routes from abp (DynamicApiControllerBuilder) into this config ? Thks !
using Abp;
using Abp.Application.Services;
using Abp.Modules;
using Abp.WebApi.Controllers.Dynamic.Builders;
using System;
using System.Reflection;
using System.Web.Http.SelfHost;
namespace ConsoleApplication3
{
//#region AppService
public interface IKartAppService : IApplicationService
{
int GetValue();
}
public class KartAppService : IKartAppService
{
public int GetValue()
{
return 5;
}
}
//#endregion AppService
public class Program
{
static void Main(string[] args)
{
using (var bootstrapper = new AbpBootstrapper())
{
bootstrapper.Initialize();
var config = new HttpSelfHostConfiguration("http://localhost:8071");
// TEST URL http://localhost:8071/api/services/test/kart/getValue
// HOW TO inject Dynamic routes from abp (DynamicApiControllerBuilder) into this config ?
//config.Routes.MapHttpRoute(
//"API Default", "api/{controller}/{action}/{id}",
//new { id = RouteParameter.Optional });
using (HttpSelfHostServer server = new HttpSelfHostServer(config))
{
server.OpenAsync().Wait();
Console.WriteLine("Press Enter to quit.");
Console.ReadLine();
}
}
}
}
public class TestAppModule : AbpModule
{
public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
DynamicApiControllerBuilder
.ForAll<IApplicationService>(Assembly.GetExecutingAssembly(), "test")
.Build();
}
}
}
Great !
I successfully created a RealTimeManager (dll, specific module) which I can insert in ApplicationService (via constructor injection) And in PostInitialize Web Project via IIocResolver like you specified in your doc.
public override void PostInitialize()
{
using (var realtimeManager = IocManager.ResolveAsDisposable<RealTimeManager>())
{
realtimeManager.Object.SetValue(666666666);
}
public class RealTimeManager : IRealTimeManager, ISingletonDependency
indeed, my process need to be connected to TCP 24h/24 365day/year, so i'll prevent IIS to sleep process.
thks for the big help !
Thks for the explaination regarding webapi & autorisation !
Indeed, your project using separated project looks interestring but a little bit more complex.
For the rest, I created a visio. Black : what's already done (default abp working process) <span style="color:#FF0000">Red : what I want to achieve. (forget about SignalR on schema)</span>
The main problem is how to inject data in "Cache in Memory" from a tcp service.
Is it possible to encapsulate all theses processes in one running IIS process ? (except the TCP/IP Server which is external of course)
I don't think so, due to the TCP service (explained in previous post)
Not related question to previous problem :
Hey ! :)
I've a question about a specific architecture. I have to add 2 new features :
My goal is to have WebAPIs to retrieve DB stuff (already done) AND WebAPIs to retrieve infos from a realtime cache. I will NOT use SignalR for this part (for performance reason, i'll call webapi once each 5 minutes instead of receiving signalR datas each second) My realtime is delayed with 5-10 minutes, so it's not a problem.
This cache is not coming from DB but from a memory cache (list object) which is filled each second by a tcp stream.
Knowing that WebAPI IIS are initialized when called, i can't run a tcp service on IIS.
I just need to create an windows service for that. (like you explained on <a class="postlink" href="https://github.com/aspnetboilerplate/aspnetboilerplate/issues/174">https://github.com/aspnetboilerplate/as ... issues/174</a> )
I see multiple solutions here for the memory cache :
[/:m:i7cspscg] [:i7cspscg]<ins>Split the current project (WebAPI & Web) into 2 distinct process.</ins>
Thks for your help !
Hey GVB !
I understand your message; but I think it is a little bit aggressive.
ABP and zero module are free; hikalkan does his best to help us on the forum, in his free time . There is no obligation for him to help us on ABP & ABP module Zero. (I do not talk about ABPZero here)
Maybe that's not (yet) useful for his project to make authentication WebAPI and that's not a priority.
The community can also develop and improve the project on github since it's opensource.
And I join you; this could be a very interesting feature (WebAPI Authentification) if it's realistic :) (i'll search tomorrow about it)
Nevermind, if you implement something similar ; I might be interested :) ( And perhaps integrate it into ABP github ? )
Indeed, AbpAuthorize works fine :)
I just misunderstood the doc ^^
Maybe adjust it's a good idea to clarify the doc :
Thks for your previous explaination:)
Hey :)
Based on the doc <a class="postlink" href="http://www.aspnetboilerplate.com/Pages/Documents/Authorization">http://www.aspnetboilerplate.com/Pages/ ... horization</a> "AbpAuthorize (AbpMvcAuthorize for MVC Controllers and AbpApiAuthorize for Web API Controllers)"
I would like to restrict my methods from WebAPI Controllers (ApplicationService) to logged users only.
I tried with [AbpApiAuthorize ] but it goes in the method even if not logged. With [AbpAuthorize] the restriction works fine (error user not logged in) and redirect me to the login page (that's normal).
Do I do something wrong with [AbpApiAuthorize] ? i searched on the github repository but there is no code where it's used. (I want to use "AbpApiAuthorize" to get the unAuthorizedRequest>true</unAuthorizedRequest>; & no redirection)
//[AbpApiAuthorize]
[AbpAuthorize]
public List<RiderDto> GetRiders(TimeIntervalDto interval)
{
Thks for your help :)
Hey !
In the case where we can have both logged/Anonymous users and that I want to restrict from external ips;
I think the best way is :
Do you think this is a good idea to create one generic "public" user used by hundred/thousand of person ?
If yes, I see this way
public ActionResult Index()
{
if(...) // check if already logged in, otherwise login as "public user
AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = true }, loginResult.Identity);
return View("~/App/Main/views/index.cshtml");
}