API, Web Service, Service z TCP

0

Witam.
Nie bardzo wiem jak tego szukać na internetach dlatego pytam tutaj. Potrzebuje aplikację offline w jakiś sposób zrobić online.
Czy jest jakaś opcja, która nie wymaga dodatkowej konfiguracji? Na przykład zwykła usługa, instaluje i działa.
Web API odpada bo IIS, Web Service - nie bardzo wiem jak to ukryźć, Usługa i połączenie po TCP - przekierowania portów nie wszędzie wchodzą w grę.

0

Jaki system, jaka aplikacja i co ona ma robić?

0

Nie rozumiem pytania. Chcesz udostępnić zdalny dostęp do swojej aplikacji? Chcesz aby udostępniała ona pewne API? Chcesz mieć stronę internetową z widokiem twojej aplikacji? To jest twoja aplikacja, którą możesz zmodyfikować?

Usługa i połączenie po TCP - przekierowania portów nie wszędzie wchodzą w grę.

Bez bezpośredniego dostępu albo przekierowania portów to nie wystawisz niczego na świat tylko trzeba będzie robić obejścia.

0

System na którym jest aplikacja "offline" to Windows i tylko Windows będzie. System na którym "API" klienta miało by działać to najlepiej Windows i Android albo WWW. Aplikacja to jedna z popularniejszych ERP, jej wersja jest tylko winformsowa. Producent udostępnia obiekty COM do swojego oprogramowania żeby można było robić jakieś dodatki itp itd.
Szukam technologii, która pozwoli mi wystawiać dokumenty w tym ERP bez względu na to gdzie jestem.
Przekierowania portów jeszcze idzie ogarnąć bo większość ma routery w których można coś zmienić ale nie wszędzie mogę postawić IIS do Web API.

0

Optima?

0

Tak

0

Czy jest jakaś opcja, która nie wymaga dodatkowej konfiguracji? Na przykład zwykła usługa, instaluje i działa.

Może i jest taka, którą się instaluje i działa ale nic z tego nie wynika. API trzeba stworzyć, trzeba napisać backend, który pobierze dane z systemu źródłowego i udostępni przez wcześniej stworzone API odbiorcy. To się niestety samo nie zrobi. Możesz skożystać z gotowych szkieletów np. Apache CXF czy Project Jersey

Web API odpada bo IIS, Web Service - nie bardzo wiem jak to ukryźć,

To zostaje REST. A jaki język to zazwyczaj bierze się ten, który pozwala napisać daną rzecz i zna się go najlepiej.

Usługa i połączenie po TCP - przekierowania portów nie wszędzie wchodzą w grę.

Jeśli "serwer" jest za NATem lub z jakiegoś powodu nie pa publicznego IP to nie może być serwerem dla urządzeń spoza sieci bez przekierowania portów (ew. VPN wchodzi w grę).

0

Nie wiem o co chodzi w kwestii "API trzeba napisać, trzeba napisać backend", taki mam zamiar tylko szukam porady w czym :)
Pakować się w jakieś nowe technologie, które z czasem staną się standardem czy najzwyklejsza w świecie konsola i wszystko klepać pod swoje potrzeby?

0

najlepiej pisać w tym, w czy umiesz, szczególnie jeśli ma to być kod produkcyjny (a tak wnioskuję z pytania). A o co chodzi Ci z tą konsolą to nie mam pojęcia.
BTW aktualnie masz dwie wiodące protokoły do komunikacji - REST i SOAP oraz dwa "nośniki" informacji - XML i JSON. Generalnie możliwe jest napisanie serwisów opartych o każdą kombinacje jednak SOAP naturalnie opiera się o XML a REST o JSON

0

Comarch udostępnia instalatorom na życzenie opis API i dllki, które pozwalają komunikować się z bazą tak jakbyś był Optimą. Wraz z nimi dostajesz przykłady generowania różnych dokumentów w kilku językach. Wybierzesz co ci będzie pasowało. Teraz najlepiej będzie pewnie stworzyć aplikację webową, która od strony klienta wystawi WebAPI, a od strony bazy będzie komunikowała się przez API Optimy. Generowanie dokumentów kiedyś próbowałem i jest stosunkowo proste, ale są dwa tematy, na które musisz zwrócić uwagę:

  • ta aplikacja będzie do działania wymagała osobnej licencji (ona liczy się jak kolejne stanowisko Optimy),
  • z racji zmian w prawie w naszym pięknym państwie, Optima jest dosyć często aktualizowana (nawet kilka razy rocznie) i nie wiem czy te aktualizacje nie będą przekładały się na to, że będziesz musiał aktualizować dllki w swojej aplikacji.
0

W kwestii API i dll od Comarch do Optimy jestem świadom jak działają i jak je ogarnąć - licencja i aktualizacje obiektów COM. Mam na swoim koncie już parę aplikacji, które wykorzystują obiekty COM. Cały projekt jest w fazie bardzo wczesnego planowania czy w ogóle się opłaca coś takiego robić. Biorąc pod uwagę konkurencje np.: Enova365 która to samo ma wersji okienkowej i WWW, biorę za duży krok naprzód, ponieważ mogę wystawić fakturę w biurze i w domu. W kwestii oprogramowania Comarch zostaje kupić XT i migrować z Optimy albo postawić serwer i po RDP.
Myślę nad WebAPI i chyba tą drogą pójdę.

2

Web api może się hostować jako usługa Windows albo nawet jakiś exe. Nie trzeba iis.

0
jacek.placek napisał(a):

Web api może się hostować jako usługa Windows albo nawet jakiś exe. Nie trzeba iis.

Ooo :D to ja to chce!
Masz może jakieś przykłady, dokumentację?

1

Nuget Microsoft.AspNet.WebApi.SelfHost

Ja mam w jednym projekcie w WinForms w Program.cs

using System.Web.Http.SelfHost;
using System.Net.Http.Formatting;
using System.Web.Http;

int portip = Properties.Settings.Default.TerminalCommIPPort; // to jest z mojej konfiguracji
            var config = new HttpSelfHostConfiguration($"http://0.0.0.0:{portip}/");
            config.Formatters.Clear();
            config.Formatters.Insert(0, new JsonMediaTypeFormatter());
            config.MaxReceivedMessageSize = 2147483647;
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "machine",
                routeTemplate: "api/{controller}/{action}/{rollNr}/{machineNr}"
            //defaults: new { controller = "machine"}
            );

            config.Routes.MapHttpRoute(
                name: "API",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }

            );

            using (HttpSelfHostServer server = new HttpSelfHostServer(config))
            {
                if (Properties.Settings.Default.RunTerminalComm == true)
                {
                    try
                    {
                        server.OpenAsync().Wait();
                    }
                    catch (Exception)
                    {

                        MessageBox.Show("Wystapił błąd uruchomienia komunikacji dla terminali.");
                    }
                    
                }
// dalej jest typowe uruchomienie aplikacji WinForms

I w projekcie standardowy folder Controllers z kontrolerami API

 public class MachineController : ApiController
    {
        Messa2Entities db = null;

        public MachineController()
        {
            db = new Messa2Entities();
        }

        [HttpGet]
        [Route("api/machine/print/{id}/{printer}")]
        public IHttpActionResult Print(int id, String printer)
        {
...
        }

Miałem problem z konfiguracja globalnego Routing więc każda metoda w kontrolerach API ma przypisany Routing w annotation.
Tu masz jakieś stare info https://docs.microsoft.com/en-us/aspnet/web-api/overview/older-versions/self-host-a-web-api

Generalnie szukaj po Self-Host ASP.NET Web API

I na koniec trzeba albo uruchamiać jako admin albo zdefiniowac możliwośc otwrcia portu przez innego użytkownika
netsh http add urlacl url=http://+:8085/ user=jakiś user lokalny lub domenowy

0

Rewelacja! To jest idealne rozwiązanie do tego co chce zrobić. Dzięki :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1