Base solution for your next web application

Activities of "daws"

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)

  • if yes, any idea ?
  • if not ... what's the best solution ? split to a specific process (windows service) containing cache, specific WebAPI just for this DataLayer, TCP/IP client, SignalR hub ? (AngularJS connecting to these services)

Not related question to previous problem :

  • if I want to cache all retrieved Database datas from WebAPI calls (with same parameters), (knowing that DB data are not modified), is there something already conceived in ABP ? or should I implement custom repository with caches ? or put this cache in BusinessLayer ?

Hey ! :)

I've a question about a specific architecture. I have to add 2 new features :

  • <ins>Memory cache accessible by WebAPI AND filled by a network connection</ins>

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.

  • <ins>SignalR</ins>

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 :

  • <ins>Encapsulate my tcp service & WebAPIs TCP in a windows service.</ins>I create a separated windows service which SELF HOST webAPIs TCP and signalR In this way [list:i7cspscg] [*:i7cspscg]Current project (WebAPIs DB & Web) still works in the same process ISS
  • WebAPIs TCP are SELF HOSTED in a windows service & contains SignalR Hub also.

[/:m:i7cspscg] [:i7cspscg]<ins>Split the current project (WebAPI & Web) into 2 distinct process.</ins>

  • Web Project on IIS
  • ALL WebAPI (ABP DB & TCP) on a SELF HOSTED service. (with SignalR also)[/*:m:i7cspscg][/list:o:i7cspscg]
  • What do you think is the best solution ? (or another one ?)
  • [AbpAuthorize] is still going to work if webAPI is hosted on a different thread ? (Windows service vs Web IIS project)
  • To use ABPScripts WebAPI from different windows services (ports), do I simply include <script src="~/AbpScripts/GetScripts"> with the url & port from the specific service ?

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 :

  • AbpAuthorize <ins>for Application Service</ins>
  • AbpMvcAuthorize for MVC Controllers
  • AbpApiAuthorize for_<ins>regular (classic?)</ins>_Web API Controllers

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 :

  • an user call the website
  • main page is retrieved & contains the "public user" abpzero (if not logged)
  • any webapi call is marked as "[AbpAuthorize]"

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");
        }
Showing 111 to 120 of 126 entries