Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[JS][C#] Communicatie tussen deze

Pagina: 1
Acties:

  • Reboot
  • Registratie: Januari 2009
  • Laatst online: 29-07 22:18
Hallo,

Ik ben op zoek naar een oplossing voor het volgende:

1. Ik heb een stukje geschreven in C# dat via een dll een usb kassalade kan openen.
2. Ik heb een POS systeem in php/html/js welke via de webbrowser opgeroepen kan worden.

Vraag:
Hoe kan ik via javascript het beste mijn c# stukje oproepen?

Volgende heb ik al bekeken maar kwam niet direct bij iets nuttigs uit:
Werken met browser plugins.

Iemand ervaring/tips?

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 16:21
webmethods/webservice/ajax? Google daar maar eens op.

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Maak een standalone webservertje in je C# code, die dan op localhost op bijv. poort 8081 draait. Je kunt eventueel NancyFx daarvoor gebruiken, die heeft een simpele standalone variant.

Dan is het gewoon een kwestie van json sturen naar de juiste url.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

De asp.ner webstack code op Codeplex heeft een WebCore selfhost welke het mogelijk maakt een asp.net project (mvc, webapi, odata, webforms, etc) binnen je eigen applicatie te draaien. Hoef je niet zelf een webserver te schrijven met alle problemen welke daarbij komt kijken.

Zie onder andere deze test case voor het gebruik. De asp.net webstack is de code 'dump' van Microsoft. Ik noem het geen open-source code omdat Microsoft geen pull-requests van derden accepteert. Wat dat betreft lijkt het meer op de code release van Android. De code is openbaar, maar development gebeurt niet samen met de community.

Maar ik neem aan dat de kassalade en het POS systeem eigenlijk gekoppeld zijn aan elkaar. Waarom dan de user interface via een website laten lopen, terwijl je ook gebruik zou kunnen maken van WPF of WinForms. In dat geval zou je ook kunnen detecteren wanneer de lade weer wordt gesloten en zolang deze niet gesloten is, is de transactie niet voltooid. Vooral HTML5 en WPF hebben veel overeenkomsten wat betreft opbouw.

Daarbij hoe meer dependencies je creert met je oplossing, des te groter de kans dat dit vroeg of later problemen gaat geven. Want je hebt je dll, de access layer tot de dll, de webserver (iis of apache), website, de browser. Moet je allemaal up to date en werkend houden. Niet zo heel erg voor een proof-of-concept, maar kan wel lastig worden als je straks een klant voor je neus staat en de kassalade niet open gaat..

Want ik neem aan dat je niet alleen een kassalade hebt, maar ook een (thermische) printer voor de bon, danwel factuur. Hoewel je '@media print' een eind kan komen, is HTML niet bedoelt voor opmaak van fixed size documenten zoals een A4 factuur of een thermische bon. Nu kun je via ajax calls natuurlijk wel een delegeren naar een c# webserver(tje), maar dan zou het logischer zijn om het gehele webproject in asp.net te schrijven (dus geen php, maar webforms of mvc) en vanuit de webserver de dll aanspreken of via WinForms/WPF de presentatie te toen..

If it isn't broken, fix it until it is..


  • Reboot
  • Registratie: Januari 2009
  • Laatst online: 29-07 22:18
Hallo,

de kassalade werkt via usb op een webbased pos systeem. (draait niet lokaal).
De thermische printer, touchscreen e.d. werken reeds.

Ik ben er nog niet uit welke methode ik ga gebruiken.

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50

BikkelZ

CMD+Z

Je moet inderdaad via ASP.Net aan de gang. Het hangt er een beetje van af of je ook nog wat wil returnen maar ik zou kijken naar MVC aangezien dat het simpelste is. Dan moet je dus een webservertje hebben draaien, kan officieel IIS zijn of wat kleiners.

iOS developer


  • Reboot
  • Registratie: Januari 2009
  • Laatst online: 29-07 22:18
Het is opgelost en ik heb nu werkende code:

Ik heb een console applicatie aangemaakt in c#:

Default class:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public class Program
    {
        static void Main()
        {
            HttpListener listener = new HttpListener();
            listener.Prefixes.Add("http://*:1010/");
            listener.Start();
            Console.WriteLine("Listening...");
            for (; ; )
            {
                HttpListenerContext ctx = listener.GetContext();
                new Thread(new Worker(ctx).ProcessRequest).Start();
            }              
        }
    }


En een bijkomende class:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
    class Worker
    {
        [STAThread]
        [DllImport("c:/MSPOS_USB.dll", EntryPoint = "OpenDrawer", CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
        private static extern int OpenDrawer(int device_handle);
        [DllImport("c:/MSPOS_USB.dll", EntryPoint = "GetDrawerStatus", CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
        private static extern int GetDrawerStatus(int device_handle);
        [DllImport("c:/MSPOS_USB.dll", EntryPoint = "GetDrawerHandle", CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
        private static extern int GetDrawerHandle(byte drawer_number);

        private HttpListenerContext context;

        public Worker(HttpListenerContext context)
        {
            this.context = context;
        }

        public void ProcessRequest()
        {
            // Update console.
            string msg = context.Request.HttpMethod + " " + context.Request.Url;
            Console.WriteLine(msg);

            // check for openstring
            string openstring = "opendrawer";
            var response = msg.Contains(openstring);

            // Create the response (true or false)
            StringBuilder sb = new StringBuilder();
            sb.Append(response);

            // Output to the browser
            byte[] b = Encoding.UTF8.GetBytes(sb.ToString());
            context.Response.ContentLength64 = b.Length;
            context.Response.OutputStream.Write(b, 0, b.Length);
            context.Response.OutputStream.Close();

            if (response.ToString() == "True")
            {
                int kassanummer = GetDrawerHandle(0);
                int kassastatus = GetDrawerStatus(kassanummer);
                if (kassastatus == 1)
                {
                    OpenDrawer(kassanummer);
                }       
            }
        }

    }


door dan nu te surfen naar: http://localhost:1010/opendrawer zal de kassa open springen.

Door onder build properties het output type van Console application aan te passen naar Windows Application zal het venster ook niet zichtbaar zijn.

Bedankt voor de reacties.. Heeft mij op de goede pad gezet!
Pagina: 1