Base solution for your next web application

Activities of "daws"

I'm not sure to understand but if you want to use claims authorization on your webAPI calls, you should not inject [Authorize] on WebAPI Project but in each method of Services that implements "IApplicationService".

Something like :

public class TesttAppService : ApplicationService, ITestAppService
    {
// repositories ...

// Constructor ...

        #region Functions

        [AbpAuthorize]
        public List<string> GetValues(SearchDto Search)
        {
            ...
			
            return values;
        }

doc here <a class="postlink" href="http://www.aspnetboilerplate.com/Pages/Documents/Authorization">http://www.aspnetboilerplate.com/Pages/ ... horization</a>

Answer

For info to hikalkan, I've also the same problem.

I've disabled the browser's cache on my DEV machine, so there is no problem. But for other machines, old cache still apply after switching language :)

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 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 !

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 71 to 80 of 83 entries