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ę.
Jaki system, jaka aplikacja i co ona ma robić?
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.
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.
Optima?
Tak
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ę).
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?
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
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.
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ę.
Web api może się hostować jako usługa Windows albo nawet jakiś exe. Nie trzeba iis.
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ę?
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
Rewelacja! To jest idealne rozwiązanie do tego co chce zrobić. Dzięki :D