NAS and Web Users

MikeMacMikeMac Member Posts: 11
edited 2006-11-23 in Navision Attain
I've been trying to get some detailed technical information regarding the use of specific products through the regular channels of Navision Support, but to no satisfactory end.

A component of our vertical is an external automated data capture system. This application interfaces with bar-code scanners, weigh scales, label printers, etc. We intend to accomplish db communication between the external application and the Navision db using NAS.

While I'm somewhat assured NAS is the way to go, I am unclear what method to use as a means of data communication; MSMQ, Navision Sockets, etc. What are the benefits of one over the other?

I would also like to hear any feedback with experiance with Web Users. It is my hope we are able to use these as opposed to named sessions.

Comments

  • chrmuellerchrmueller Member Posts: 9
    Hello,

    I've already written some external applications communication with Navision over the NAS. (Even a small Web-Frontend)

    My favorite communication adapter is the "Socket Adapter".

    You have to take a look at your frontend: which technical system does it support?
    When the Webapplication perhaps is hosted on a Linux-System it doesn't make much sense to communicate over MSMQ, because with a Linux-System you can't (or only with big problems) communicate over a Microsoft Message Queue! Also you will have a big problem to instance one of the Navision COM-Objects (ComCom2 or Adapter) on a Linux-System.
    The NamedPipe Adapter is (the way I know) not platform-specific, so you could take this one. But my problems with the NamedPipe are: I don't know exactly how to open a Named Pipe on other systems. The same problem like the MessageQueue: on a Linux-System the COM-Objects of Navision are useless! The second problem with the NamedPipe is, that you can't "debug" it. I don't know how to...
    The SocketAdaptor is the easiest way to communicate:
    It's not platform-specific. You can open a TCP-socket from nearly every system (with and without COM-Objects, if your WebSolution is a VB/ASP-Solution, you'll find a lot of ActiveX/COM-Objects free in the WWW to establish a communication) an every Programming Laguage (Java, PHP, VB...). With simple methods (in the command-shell: netstat -na) you can "debug" the socket-communication. Also you can use a sniffer.

    In my opinion the SocketAdapter is the easiest and best way to communicate with Navision. TCP/IP is of course the most popular protocol worldwide ;) !

    Hope I could help you.
  • MikeMacMikeMac Member Posts: 11
    Thanks chrmueller,

    The application we are building is a windows based client app (not a web-based application), so platform scalability is not an issue.

    It's purpose is to collect data from a manufacturing environment via peripheral devices (such as scales and bar-codes), register that data in the Navision db and return data from the db to the app. Given its asynchronous nature and the fact it 'guarentees' delivery, I'm somewhat inclined to lean towards it as our delivery mechanism. I'm also confident from recent benchmark results that performance won't be an issue.

    The current system configuration is already using NAS & Commerce Gateway in communicating with another financials application via BizTalk. My concern is how or if to 'double-duty' NAS as the mid-tier between two external apps and our Nav db.

    A side question: Is it possible to use 'Web Users' licences (as oppossed to Sessions) for the external application I describe? Issue is that there may be up to 20 clients requiring connection to the db and cost becomes a concern with each requiring a session.

    Appreciate any feedback.
  • chrmuellerchrmueller Member Posts: 9
    Ok,

    if there is already established a communitcation between NavDB and other ext. Financials Apps over NAS and BizTalk, then I only have one annotation:
    Check if one NAS Instance is enough to handle all the requests and responses. The transport-layer shouldn't be the problem, because even if you use Socket-Transport for all requests and repsonse you can handle it over different ports -> so you don't have any problem with this.
    But the NAS-Application will be the bottleneck! If all 5 seconds are requests comes in this nonGUI-Client will be very "stressed".

    Over license-things I do know very much - sorry.

    Regards
    Christian
  • MikeMacMikeMac Member Posts: 11
    Christian,

    So you say one instance of NAS shouldn't have an issue with multiple external connections, but you are of the opinion that NAS in this configuration is a probable bottleneck?

    Are you suggesting it is a possible bottleneck even if the NAS instance were only communicating with the one custom application (disregarding the CG/BizTalk stuff)? OR would the risk of performance degradation be mitigated with two NAS instances? :shock:

    Thanks for the dialogue.

    Mike
  • chrmuellerchrmueller Member Posts: 9
    Hi Mike,

    a NAS-Instance could be a bottleneck. It depends on how much requests per second / minute / hour are coming in via NAS and how much responses have to go out.
    If only every hour or minute one reuqest arrives you don't have any problem. But if every second a request arrives there could be one. You can see the NAS as a nonGraphical-Client. The NAS has the same function as a normal NavClient - only without a GUI.

    If the processing after "importing" data for example over Socket into the NAS takes 10 seconds and if this process also locks tables this process could constrain the next incoming message! (if it locks tables it could constrain the whole Navision application too)

    You can check the duration of the process with a normal Navision Client. If you have problems with perfomance there, you will have them with the NAS too.

    A second Instance would help in that case that you could handle more requests a the same time. Like a second employee ;)

    Christian
  • Henry@columbusHenry@columbus Member Posts: 24
    Hello,

    I’m trying to create a working client server application with the "Navision Socket Bus Adapter". I’m able to create a server and a client. The server is working just fine but I’m having trouble with the “MessageReceived” trigger in my client. There’s no way to get the client to receive a message.

    Here’s my code:
    OnRun
    
    //Check if ComCOm is clear
      IF ISCLEAR(ComCom) THEN
        IF NOT CREATE(ComCom) THEN
          ERROR('Failed to create Communication Component');
    //Check if Socket Bus Adapter is clear
      IF ISCLEAR(SBA) THEN
        IF NOT CREATE(SBA) THEN
          ERROR('Failed to create SBA');
    // Add the SBA to the Comunication Component
      ComCom.AddBusAdapter(SBA, 0);
    
    OutMsg:= ComCom.CreateoutMessage('Sockets://localhost:5678');
    OutStr:= OutMsg.GetStream();
    OutStr.WRITE('First Text');
    OutMsg.Send(0);
    
    ComCom::MessageReceived@1(VAR InMessage:Automation:'.IDISPATCH");
    
    //Displays a Message if something happens
      MESSAGE('Message Received!');
    

    Can anybody help me ? :roll:

    Thanks
  • TSESDSTSESDS Member Posts: 14
    We also plan to use NAS and the socket bus adapter for two kinds of xml-requests from different clients/processes (maybe at the same time). We have built a codeunit which returns customer information to a requested customer id. The navision db ist SQL-Server. Under normal condition we can request 300 times in a second. But the scenario changes when a request wants to request the customer information for a customer (id) which is locked by for example a user with a GUI-based navision client. Then all pending socket connections have to wait until the blocked one gets its data or a timeout occurs (does anyone know how you can set a timeout value for a GET-function call on a table RECord?). In this case the performance can be bad. One question is how often such longterm blocking situations can occur and if there are possibilities to decrease (or better avoid) them?
Sign In or Register to comment.