API Access Violation

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

Luki1608
Posty: 3
Rejestracja: 23 kwie 2021, 13:59
Rola: Administrator CDN XL

API Access Violation

Post autor: Luki1608 »

Wykonałem aplikację, która służy do podglądu zamówień na magazynie.
Front w Angularze. Backend w C#.
Wszystko mi działa tak jak zaplanowałem, jednak jeśli chcę użyć cdn_api to otrzymuję Access Violation(Zrzut w załączeniu).
Dzieje się to losowo. Czasami można kila razy połączyć się i działa bez zarzutu.
Celem aplikacji jest dodawanie lub zmiana atrybutu na zamówieniu.
Na ten moment tylko logowałem się do systemu, żeby sprawdzić czy działa mi cdn_api.
Dodałem ClaRUN.dll.

Może ktoś miał podobną sytuację i umiałby wskazać gdzie mam błąd.



Poniżej kod:

Kod: Zaznacz cały

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using backendAPI.Models;
using System.Linq;
using backendAPI;
using Microsoft.AspNetCore.Http.HttpResults;
using System.Runtime.InteropServices;

namespace OnlineZS.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class ZamowienieSprzedazyController : ControllerBase
    {
        [DllImport("ClaRUN.dll")]
        private static extern void AttachThreadToClarion(int flag);
        protected void AttachThread(int flag)
        {
            try
            {
                AttachThreadToClarion(flag);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
       
        
        private readonly ErpxlContext _context;
        
        public ZamowienieSprzedazyController(ErpxlContext context)
        {
            
            _context = context;
        }


        [HttpPost("change-status")]
        public IActionResult ChangeStatus([FromBody] AttributeStatus zsID)
        {
            AttachThread(1);
            int gidNumer = zsID.ZSGidNumer;
            if (gidNumer > 0)
            {
                var zsStatus = _context.Atrybuties
                    .Where(atrStatus => atrStatus.AtrAtkId == 87 && atrStatus.AtrObiNumer == gidNumer).ToList()
                    .Select(zamAtr => zamAtr.AtrWartosc)
                    .FirstOrDefault();
                
                switch (zsStatus)
                {
                    case null:
                        return Ok("Null");
                    break;
                    case "NIE":
                        XLHead XlHead = new XLHead();
                        int tmp = XlHead.XlLogin();
                        return Ok(tmp);
                    break;
                    case "TAK":
                        return Ok("TAK");
                    break;
                    default:
                        return BadRequest("Error - ZamID");
                }
                
            }
            else
            {
                return BadRequest("Nieprawidłowy numer ID.");
            }
        }
    }
}

Załączniki
Screenshot_203.png
Screenshot_203.png (19.53 KiB) Przejrzano 597 razy

Lilpri
Posty: 120
Rejestracja: 13 maja 2019, 11:04
Rola: Administrator CDN XL

Re: API Access Violation

Post autor: Lilpri »

Musisz zrobić jakieś kolejkowanie. API jest jednowątkowe i obstawiam że tu jest problem

StabiL
Posty: 39
Rejestracja: 28 cze 2017, 15:41
Rola: Konsultant CDN XL

Re: API Access Violation

Post autor: StabiL »

Dodawanie lub zmianę atrybutu na zamówieniu osobiście robiłbym poprzez SQLa :)

Luki1608
Posty: 3
Rejestracja: 23 kwie 2021, 13:59
Rola: Administrator CDN XL

Re: API Access Violation

Post autor: Luki1608 »

Dzięki za odpowiedzi :)

Na ten moment jednak zmieniam podejście i będę to robił z SQL, tak jak radzi StabiL

Lilpri czy mógłbyś coś więcej powiedzieć o kolejkowaniu? Jaka jest Twoja wizja?

Lilpri
Posty: 120
Rejestracja: 13 maja 2019, 11:04
Rola: Administrator CDN XL

Re: API Access Violation

Post autor: Lilpri »

Najprościej:
Wszystkie zapytania do API wpadają w kolejkę, np. Redis lub rabbitmq. I po kolei wypuszczane do xl'a.
Czyli załóżmy w ciągu minuty wpada 20 zamówień od różnych operatorów panelu web. Nie pchasz wszystkiego jednocześnie tylko po kolei :) Co w web dev nie jest takie oczywiste

ODPOWIEDZ