How To install a NAV Application Server (NAS)?

AdministratorAdministrator Member, Moderator, Administrator Posts: 2,500
edited 2013-11-25 in How Tos section
How To install a NAV Application Server (NAS)?

http://www.mibuso.com/howtoinfo.asp?FileID=15

Discuss this How To here.
«13

Comments

  • krikikriki Member, Moderator Posts: 9,112
    Not really, that page describes the job queue setup. This how-to describes in detail how to setup any NAS, but it does not go into detail on how to setup some predefined functionality of Navision.
    Regards,Alain Krikilion
    No PM,please use the forum. || May the <SOLVED>-attribute be in your title!


  • cwtan71cwtan71 Member Posts: 5
    Hi,

    I am trying to install NAS and do not understand the part on adding trigger ID 99 into codeunit 1. What does ID 99 refers to? I had read on C/SIDE Help but does not provide a clue on this.

    Could anyone please help to enlighten?

    Thnaks.

    Regards,

    Wilson
  • Luc_VanDyckLuc_VanDyck Member, Moderator, Administrator Posts: 3,633
    Every function in a codeunit has a property called ID. This is a number which is automatically incremented when you create new functions. For the NAS function this ID needs to be 99. You can modify this ID using the property window.
    No support using PM or e-mail - Please use this forum. BC TechDays 2024: 13 & 14 June 2024, Antwerp (Belgium)
  • katja1989katja1989 Member Posts: 21
    I followed the tutorial, but I have problems with starting the Microsoft Dynamics NAV application Server NAV service.

    I get the following error message:

    "Could not start the Microsoft Dynamics NAV application Server NAV service on Local Computer.

    Error 1: Incorrect function."

    If the reason has something to do with the codeunit1 could you please describe me in detail how to fix it.

    PS: I used the .fob file from the tutorial

    Thanks for any suggestions in advance!

    Best regards
    Katja
  • krikikriki Member, Moderator Posts: 9,112
    Sometimes I also have that problem.
    If after some retries to start the service, I still have the error, I de-install it.
    And I retry to launch the installation script again BUT WITHOUT THE ",INSTALLASSERVICE"-parameters. This just launches the NAS with current user. If it still gives errors, probably there is some problem with permissions for current user (or the NAS user in case of a service) in Navision.
    If it works, I install the NAS again as service and set up again the correct permissions.
    Sometimes I have to read this 2 or 3 times.
    Regards,Alain Krikilion
    No PM,please use the forum. || May the <SOLVED>-attribute be in your title!


  • katja1989katja1989 Member Posts: 21
    Thanks for your help but I found out, that I've got some other problems too:

    - within the nasstart.cmd I have to enter the "server name" and the "database name" ... but I've got no idea, which server name and which database name to enter??

    do I have to enter the name of the ms dynamics nav database server (shown in the windows services) or the name of the real sql server (both are running on the same machine and this is also the machine, where I want to install nas)

    thank you for your help
  • imurphyimurphy Member Posts: 308
    server name will refer to the SQL instance. Db is the db name within sql.

    So, if you have a db on AnSqlServer called MycompanyDb where the SQL is running as the default instance (the commonest situation) then

    servername = AnSqlServer
    Database name = myCompanyDb

    If you have installed SQL on a separate instance called SQL2005 then you will have something like this:

    servername = AnSqlServer\SQL2005
    Database name = myCompanyDb

    Ian
  • katja1989katja1989 Member Posts: 21
    where do I find out what name my database has got?

    the navision db? database.fdb? do I have to enter the absolute path or the relative path?

    if the sql server is on the same machine, servername=localhost is correct too, isn't it?

    thanks for your help
  • katja1989katja1989 Member Posts: 21
    katja1989 wrote:
    where do I find out what name my database has got?

    the navision db? database.fdb? do I have to enter the absolute path or the relative path?

    if the sql server is on the same machine, servername=localhost is correct too, isn't it?

    thanks for your help

    fixed that problem ...

    but what to do under point 10 in the howto ?!?!

    WHERE do I have to enter this code?
    ](*,)
  • krikikriki Member, Moderator Posts: 9,112
    katja1989 wrote:
    but what to do under point 10 in the howto ?!?!

    WHERE do I have to enter this code?
    ](*,)
    You have to put it in function NASHandler.
    Search for the text "IF CGNASStartedinLoop = FALSE THEN" and you will find it.
    Regards,Alain Krikilion
    No PM,please use the forum. || May the <SOLVED>-attribute be in your title!


  • katja1989katja1989 Member Posts: 21
    ok i found the code lines

    but what is ment by:
    CODEUNIT::”Some CodeUnit”
    in the example code?

    I guess the 'THEPARAMETER' refers to the parameter I have chose for installing my NAS service. But what does the "Some CodeUnit" mean?

    IF CGNASStartedinLoop = FALSE THEN
    CASE Parameter OF
    //> START
    'THEPARAMETER': CODEUNIT.RUN(CODEUNIT::”Some CodeUnit”);
    //< STOP
    'OSYNCH','JOBQUEUE':
  • krikikriki Member, Moderator Posts: 9,112
    katja1989 wrote:
    ok i found the code lines

    but what is ment by:
    CODEUNIT::”Some CodeUnit”
    in the example code?

    I guess the 'THEPARAMETER' refers to the parameter I have chose for installing my NAS service. But what does the "Some CodeUnit" mean?

    IF CGNASStartedinLoop = FALSE THEN
    CASE Parameter OF
    //> START
    'THEPARAMETER': CODEUNIT.RUN(CODEUNIT::”Some CodeUnit”);
    //< STOP
    'OSYNCH','JOBQUEUE':

    It means you have to run your singleinstance codeunit there. This initializes the codeunit and it remains active from then on.
    Regards,Alain Krikilion
    No PM,please use the forum. || May the <SOLVED>-attribute be in your title!


  • katja1989katja1989 Member Posts: 21
    don't get the point :-k

    got an example what to enter there?
  • krikikriki Member, Moderator Posts: 9,112
    katja1989 wrote:
    don't get the point :-k

    got an example what to enter there?
    Check the last part of the how-to. There is some code on how you can use it.
    And there is also a fob in which there is a small example.
    Regards,Alain Krikilion
    No PM,please use the forum. || May the <SOLVED>-attribute be in your title!


  • katja1989katja1989 Member Posts: 21
    another question ...

    i checkedmy event viewer and the NAS and the NASDB service gave me the some warning messages.

    well the NASDB service gives me an TCP/IP error because the host is not answering. but how could that be? because i entered "localhost" in the setup-file and I also checked the hosts file, there is a localhost 127.0.0.1 entry

    :cry:
  • krikikriki Member, Moderator Posts: 9,112
    Did you try with the real name of your machine?
    I have to admit I never tried with localhost.
    Regards,Alain Krikilion
    No PM,please use the forum. || May the <SOLVED>-attribute be in your title!


  • katja1989katja1989 Member Posts: 21
    gotta try that on monday!

    at this point I've got another question ... ;)

    i was woundering what the startup parameter should look like.
    Navision says it musst start with NEP-

    Should my service startup parameter now look like "NEP-NAV" or only "NAV"?
    And should my Navision startup parameter now look like "NEP-NAV" or only "NAV"?

    I hope you get the point, what I am trying to say.
  • krikikriki Member, Moderator Posts: 9,112
    Depends.
    If you want to use the Employee portal, it should start with 'NEP-'.
    If you have your own functionality, you can call it how you want.
    Regards,Alain Krikilion
    No PM,please use the forum. || May the <SOLVED>-attribute be in your title!


  • katja1989katja1989 Member Posts: 21
    kriki wrote:
    Did you try with the real name of your machine?
    I have to admit I never tried with localhost.

    tried both possiblities ... and both are not working because of
    The TCP/IP connection's 'host' is not answering (TCP/IP error ECONNREFUSED).

    You can see how to make changes to your 'hosts' and 'services' files in the documentation.

    :(

    I made changes to the hosts and services files but without any success

    at this point I've got another question ... concerning the EP setup in NAV.
    in the application server setup I have to configure the front end processing (the 2 queues). the first one ".\private$\nep_request_queue" seems quite logical to me, but due the fact that I am using sharepoint on another machine (called: moss2) I have to change the reply queue, don't I? Tried it with: "MOSS2\\private$\nep_reply_queue" ... will this work? if not how should this line look like?

    thanks in advance
  • krikikriki Member, Moderator Posts: 9,112
    For the first part, I think your post in here is about the same problem. Let's see if the replies in there are of any help.
    katja1989 wrote:
    at this point I've got another question ... concerning the EP setup in NAV.
    in the application server setup I have to configure the front end processing (the 2 queues). the first one ".\private$\nep_request_queue" seems quite logical to me, but due the fact that I am using sharepoint on another machine (called: moss2) I have to change the reply queue, don't I? Tried it with: "MOSS2\\private$\nep_reply_queue" ... will this work? if not how should this line look like?

    thanks in advance
    I can't help you with this. I never used NEP. And this topic is about how to install a NAS in general.
    For more info, try searching the Navision e-Commerce-forum.
    Regards,Alain Krikilion
    No PM,please use the forum. || May the <SOLVED>-attribute be in your title!


  • lyotlyot Member Posts: 202
    Hello,

    I have a question concerning the single instance codeunit property.
    Is this still advised when I have about 40 concurrent users who all connect to the nas?
    Will one user who executes a heavy process not put the others out of work due to the single instance property who is enabled?
    Is it correct that one user at a time will be served that way?
    Or am i missing out at something?
  • krikikriki Member, Moderator Posts: 9,112
    Each NAV client (or NAS) has it's own version of the singleinstance codeunit.

    I try to explain better:
    If you have 10 forms open in your client and each of them uses codeunit X and that codeunit is NOT singleinstance, your client will have 10 DIFFERENT instances of that codeunit. The different instances are completely indipendent (like having each form using it's own codeunit).
    If form A changes a value in the codeunit, form B will NOT see that change.

    Now if that codeunit is singleinstance, your 10 forms will use the SAME instance of that codeunit.
    If form A changes a value in the codeunit, form B will see that change.

    If you have different NAV clients/NAS, the singleinstance codeunit is local. If user A is changing a value in the singleinstance codeunit, user B will NOT see that change.

    lyot wrote:
    Is this still advised when I have about 40 concurrent users who all connect to the nas?
    I suppose you mean 40 users using the EP portal?
    Using or not using singleinstance : for one user blocking the others because of a heavy process will not change. This because NAV is not multitasking. If the NAS (or a client) is executing something, it will never start other processing.

    An example: if the NAS has 2 functions to do:
    Function 1 is triggered (with the timer) each 10 seconds and takes 1 second to process.
    Function 2 is triggered (with the timer) each hour and takes 2 minutes to process.

    Once function 2 is running for 2 minutes, function 1 will NOT be triggered for those 2 minutes. Once function 2 finishes, function 1 can be triggered again.

    In short : if you use 1 NAS, ONLY 1 USER WILL BE SERVED AT A TIME! And there is no way you can change this.
    If you want the possibility to serve multiple users, you need multiple NAS. (Of course if they block the same tables/records on running, you are again at 1 user will be served at a time. Even if you have a NAS for each user.)

    I hope this replies your question.
    Regards,Alain Krikilion
    No PM,please use the forum. || May the <SOLVED>-attribute be in your title!


  • lyotlyot Member Posts: 202
    kriki wrote:
    Now if that codeunit is singleinstance, your 10 forms will use the SAME instance of that codeunit.
    If form A changes a value in the codeunit, form B will see that change.
    In my case this does more evil than good.
    kriki wrote:
    If you have different NAV clients/NAS, the singleinstance codeunit is local. If user A is changing a value in the singleinstance codeunit, user B will NOT see that change.
    Ok that's more like it :)
    But what do you mean by "the single instance codeunit is local"?
    I have one NAS that serves multiple users.
    kriki wrote:
    lyot wrote:
    Is this still advised when I have about 40 concurrent users who all connect to the nas?
    I suppose you mean 40 users using the EP portal?
    Nope users using handheld terminals...
    Maybe 40 is slightly exagerated... but I want to be sure of the impact on performance.
    kriki wrote:
    Using or not using singleinstance : for one user blocking the others because of a heavy process will not change. This because NAV is not multitasking. If the NAS (or a client) is executing something, it will never start other processing.
    Ok but as I understand from the How-to, defining you codeunit as single instance enables the codeunit to restart it self.
    When this is not the case when he's not single-instance.
    kriki wrote:
    In short : if you use 1 NAS, ONLY 1 USER WILL BE SERVED AT A TIME! And there is no way you can change this.
    If you want the possibility to serve multiple users, you need multiple NAS. (Of course if they block the same tables/records on running, you are again at 1 user will be served at a time. Even if you have a NAS for each user.)

    This is clear now :)

    Thank you for the response.
  • krikikriki Member, Moderator Posts: 9,112
    lyot wrote:
    kriki wrote:
    Using or not using singleinstance : for one user blocking the others because of a heavy process will not change. This because NAV is not multitasking. If the NAS (or a client) is executing something, it will never start other processing.
    Ok but as I understand from the How-to, defining you codeunit as single instance enables the codeunit to restart it self.
    When this is not the case when he's not single-instance.
    A normal codeunit is removed from memory when the OnRun-trigger is finished and it cannot be reactivated anymore (except by another CODEUNIT.RUN).

    The singleinstance means that after the OnRun-trigger has is finished, the codeunit remains in memory and is activated by external factors like an event from a DLL.
    Regards,Alain Krikilion
    No PM,please use the forum. || May the <SOLVED>-attribute be in your title!


  • zaczac Member Posts: 29
    Hi Kriki
    I've using your manual to install NAS but for Navision version 4. I hope it's the same but I have a problem with step 7. I'm trying to install NAS on local computer but with connection on Navision server and SQL database over network. My machine and servers are in domain and I have all privileges on them. When I run nasstart.cmd file I get a error "15:25:09: You must specify which SQL Server and database you want to connect to when you start up the Navision Application Server."
    Do you have any idea why I can not connect to the server?
  • krikikriki Member, Moderator Posts: 9,112
    Did you specify both servername=xxxxx and database=yyyyyy as the nassql.exe parameters?
    Regards,Alain Krikilion
    No PM,please use the forum. || May the <SOLVED>-attribute be in your title!


  • zaczac Member Posts: 29
    kriki wrote:
    Did you specify both servername=xxxxx and database=yyyyyy as the nassql.exe parameters?
    Yes I did. I solved the problem, probably was mistake in multiline code witch I was trying to execute. Now I have to implement codeunit 1 because I now get an error about "THEPARAMETER" implementation.
    Question: It's not possible to start NAS services in first place and then implement parameter in codeunit 1?
  • krikikriki Member, Moderator Posts: 9,112
    zac wrote:
    Question: It's not possible to start NAS services in first place and then implement parameter in codeunit 1?
    It is better to implement the parameter in C1 first. Or at least put a MESSAGE for the parameter. This message you will then find in the eventlog (if all works of course). This way it is easier to test.
    Another extra for testing : don put the "INSTALLASSERVICE" on the line. This way the NAS is run from DOS and it is easier to change parameters if there is something wrong. Remember though, that the current Windows login will be used to connect to the DB.
    Regards,Alain Krikilion
    No PM,please use the forum. || May the <SOLVED>-attribute be in your title!


  • zaczac Member Posts: 29
    kriki wrote:
    zac wrote:
    Question: It's not possible to start NAS services in first place and then implement parameter in codeunit 1?
    It is better to implement the parameter in C1 first. Or at least put a MESSAGE for the parameter. This message you will then find in the eventlog (if all works of course). This way it is easier to test.
    Another extra for testing : don put the "INSTALLASSERVICE" on the line. This way the NAS is run from DOS and it is easier to change parameters if there is something wrong. Remember though, that the current Windows login will be used to connect to the DB.

    Hi,
    I have to use navision version 4 and CU 1 in it looks like
    CGStarted := FALSE;
    ParamStr := NASID;
    REPEAT
      SepPosition := STRPOS(ParamStr,',');
      IF SepPosition > 0 THEN
        Parameter := COPYSTR(ParamStr,1,SepPosition - 1)
      ELSE
        Parameter := COPYSTR(ParamStr,1);
      IF Parameter = 'CG' THEN BEGIN
        BizTalkNASStartup.RUN;
        CGStarted := TRUE;
      END;
      ParamStr := COPYSTR(ParamStr,SepPosition + 1);
    UNTIL SepPosition = 0;
    
    IF NOT CGStarted THEN BEGIN
      NASMgt.SetNASID(NASID);
      WORKDATE := 0D;
    
      IF NASSetup.GET(NASID) THEN BEGIN
        IF NASMgt.GetSendMail THEN BEGIN
          MailHandler.RUN;
          MailHandler.StartCountDown(2000);
        END;
        IF NASMgt.GetPerformSynch THEN
          MsgDispatcher.RUN;
        IF NASMgt.GetPerformRequests THEN
          RequestHandler.RUN;
      END ELSE
        ERROR(
          Text018,
          NASSetup.TABLECAPTION,
          NASID);
    END;
    

    Here is the code a little bit different then Navision version 5 and later. Where should I put my part of code to receive the xml file stream?
Sign In or Register to comment.