Compare commits
No commits in common. "d5503ca13e998de615ed9b757ff542d953b16707" and "93db28858405df8b433ed9404de1f282d69a43b0" have entirely different histories.
d5503ca13e
...
93db288584
|
|
@ -22,18 +22,6 @@ namespace AyCode.Core.Consts
|
||||||
|
|
||||||
public static ulong MaxLogItemsPerSession = 250;
|
public static ulong MaxLogItemsPerSession = 250;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A szerver base URL-je (pl. "https://localhost:59579") — a kliens-hostok hidratálják induláskor
|
|
||||||
/// a configból (konvenció: "AyCode:Urls:BaseUrl"). A hub-/link-URL-ek EBBŐL az egy értékből származnak.
|
|
||||||
/// Fail-fast: hidratálatlan olvasás exception — hiányzó/rossz URL-lel nem megyünk tovább csendben.
|
|
||||||
/// </summary>
|
|
||||||
private static string? _baseUrl;
|
|
||||||
public static string BaseUrl
|
|
||||||
{
|
|
||||||
get => !string.IsNullOrWhiteSpace(_baseUrl) ? _baseUrl : throw new InvalidOperationException("AcEnv.BaseUrl nincs beállítva — a host indulásakor hidratáld a configból (konvenció: 'AyCode:Urls:BaseUrl').");
|
|
||||||
set => _baseUrl = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static IConfiguration? _appConfiguration = null;
|
private static IConfiguration? _appConfiguration = null;
|
||||||
public static IConfiguration AppConfiguration => _appConfiguration ??= GetAppSettingsConfiguration();
|
public static IConfiguration AppConfiguration => _appConfiguration ??= GetAppSettingsConfiguration();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -82,15 +82,6 @@ A fenti `user` / `passwordHash` / `signingKey` az **ADÓZÓé** (a bejelentésre
|
||||||
|
|
||||||
> **Másik interfész (2024–25): a „NAV M2M általános gépi interfész"** — ÚJ, általánosabb beküldő-csatorna, ahol **a fejlesztő a kliensprogramot regisztrálja** a NAV-nál (a végfelhasználók is regisztrálnak + NAV-tól kapott titkos kódokat írnak be). Ez **NEM** a fenti klasszikus EKÁER 2.2 XML-interfész. Ha a NAV oda terel, ott VAN fejlesztői regisztráció — production előtt érdemes tisztázni, melyik a hatályos.
|
> **Másik interfész (2024–25): a „NAV M2M általános gépi interfész"** — ÚJ, általánosabb beküldő-csatorna, ahol **a fejlesztő a kliensprogramot regisztrálja** a NAV-nál (a végfelhasználók is regisztrálnak + NAV-tól kapott titkos kódokat írnak be). Ez **NEM** a fenti klasszikus EKÁER 2.2 XML-interfész. Ha a NAV oda terel, ott VAN fejlesztői regisztráció — production előtt érdemes tisztázni, melyik a hatályos.
|
||||||
|
|
||||||
### Teszt-környezet — külön belépés + technikai felhasználó (2026-07, gyakorlatból)
|
|
||||||
|
|
||||||
A **TESZT-rendszer credentialjai NEM a saját portál-belépési adatok** (a személyes Ügyfélkapu/EKÁER login a teszt-API-hoz `InvalidUserOrPassword`-öt ad). A menet:
|
|
||||||
1. **Teszt-hozzáférés igénylése** a NAV-nál (Kapcsolatfelvétel → „EKÁER, Informatikai problémák"; a levélben: cégnév, adószám, cím/telefon, e-mail) → a NAV e-mailben küld **kifejezetten generált teszt-belépést**.
|
|
||||||
2. A teszt-felületen a profilban **technikai felhasználó + kulcsok** generálása: `username` (technikai user, NEM a személyes login), `password`, **XML aláírókulcs** (`signingKey`).
|
|
||||||
3. A `taxNumber` a **teszthez regisztrált cég** adószámának első 8 jegye.
|
|
||||||
|
|
||||||
Ezek kerülnek az `INavCredentials`-be (a fogyasztónál: `Ekaer:Credentials`). A `BaseUrl` a teszt-hoszt (pl. `https://import-test.ekaer.nav.gov.hu`). **Endpoint:** `{BaseUrl}/TradeCardManagementService/customer/{művelet}` — a művelet-utat a kód fűzi.
|
|
||||||
|
|
||||||
## Műveletek (`tradeCardOperations` → `operation`)
|
## Műveletek (`tradeCardOperations` → `operation`)
|
||||||
|
|
||||||
| Operation | Jelentés |
|
| Operation | Jelentés |
|
||||||
|
|
|
||||||
|
|
@ -164,7 +164,8 @@ public class AcBinaryHubProtocol : IHubProtocol
|
||||||
|
|
||||||
_chunkStates = new ConditionalWeakTable<IInvocationBinder, AsyncChunkState>();
|
_chunkStates = new ConditionalWeakTable<IInvocationBinder, AsyncChunkState>();
|
||||||
|
|
||||||
_logger?.LogInformation("AcBinaryHubProtocol initialized name={Name} mode={ProtocolMode} isBrowser={IsBrowser} chunkSize={ChunkSize} initCap={InitCap} flushPolicy={FlushPolicy} flushTimeoutMs={FlushTimeoutMs} useGen={UseGen} wireMode={WireMode} interning={Interning} compression={Compression}",
|
_logger?.LogInformation(
|
||||||
|
"AcBinaryHubProtocol initialized name={Name} mode={ProtocolMode} isBrowser={IsBrowser} chunkSize={ChunkSize} initCap={InitCap} flushPolicy={FlushPolicy} flushTimeoutMs={FlushTimeoutMs} useGen={UseGen} wireMode={WireMode} interning={Interning} compression={Compression}",
|
||||||
Name, _protocolMode, IsBrowser, _options.BufferWriterChunkSize, _options.InitialBufferCapacity,
|
Name, _protocolMode, IsBrowser, _options.BufferWriterChunkSize, _options.InitialBufferCapacity,
|
||||||
_flushPolicy, _flushTimeout.TotalMilliseconds,
|
_flushPolicy, _flushTimeout.TotalMilliseconds,
|
||||||
_options.UseGeneratedCode, _options.WireMode, _options.UseStringInterning, _options.UseCompression);
|
_options.UseGeneratedCode, _options.WireMode, _options.UseStringInterning, _options.UseCompression);
|
||||||
|
|
|
||||||
|
|
@ -100,28 +100,13 @@ namespace AyCode.Services.SignalRs
|
||||||
|
|
||||||
public async Task StartConnection()
|
public async Task StartConnection()
|
||||||
{
|
{
|
||||||
var wasConnected = IsConnected();
|
|
||||||
|
|
||||||
if (GetConnectionState() == HubConnectionState.Disconnected)
|
if (GetConnectionState() == HubConnectionState.Disconnected)
|
||||||
await StartConnectionInternal();
|
await StartConnectionInternal();
|
||||||
|
|
||||||
if (!IsConnected())
|
if (!IsConnected())
|
||||||
await TaskHelper.WaitToAsync(IsConnected, ConnectionTimeout, 10, 25);
|
await TaskHelper.WaitToAsync(IsConnected, ConnectionTimeout, 10, 25);
|
||||||
|
|
||||||
// Átmenet-hook: csak TÉNYLEGES felépüléskor tüzel (a StartConnection minden küldés előtt lefut,
|
|
||||||
// már-kapcsolt állapotban nem hívjuk). Párhuzamos felépülésnél ritkán kétszer is tüzelhet —
|
|
||||||
// az override legyen idempotens.
|
|
||||||
if (!wasConnected && IsConnected())
|
|
||||||
await OnConnectionEstablished();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Kapcsolat-felépüléskor fut (első connect ÉS reconnectek után). A küldő-út várja meg —
|
|
||||||
/// hosszú munkát fire-and-forget taskként indítson, ne blokkolja az adatforgalmat.
|
|
||||||
/// Idempotensnek kell lennie (párhuzamos felépülésnél kétszer is tüzelhet).
|
|
||||||
/// </summary>
|
|
||||||
protected virtual Task OnConnectionEstablished() => Task.CompletedTask;
|
|
||||||
|
|
||||||
public async Task StopConnection()
|
public async Task StopConnection()
|
||||||
{
|
{
|
||||||
await StopConnectionInternal();
|
await StopConnectionInternal();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue