Trouble following Compute Deployment tutorial

Hi guys!
@will @stevebaer @AndyPayne

I have trouble following the updated iis server compute tutorial at https://developer.rhino3d.com/guides/compute/deploy-to-iis/

I’m stuck when trying to send a definition over with the hops component, it just errors out


this doesn’t happen when I let hops solve locally

the script I’m trying to send is just this:
image

my grasshopper settings are configured like this
image

I started an aws t2.micro instance and it is running with the suggested ports wide open

the bootstrap script finished successfully, with the variables set
image

/activechildren endpoint is reachable, briefly returns a “1”, after that only returns “0”
/healthcheck returns “Healthy”
/version is not reachable

i checked around a bit on the server and found two logs in C:\Users\RhinoComputeAppPool\AppData\Local\Temp\Compute\Logs not sure if they are helpful, here is one of them:

{"Timestamp":"2022-01-26T17:27:32.2148936+00:00","Level":"Information","MessageTemplate":"Compute {ComputeVersion}, Rhino {RhinoVersion}","RenderedMessage":"Compute \"1.0.0.0\", Rhino \"7.14.22010.17001\"","Properties":{"ComputeVersion":"1.0.0.0","RhinoVersion":"7.14.22010.17001"}}
{"Timestamp":"2022-01-26T17:27:32.5274278+00:00","Level":"Information","MessageTemplate":"Configuration Result:\n{0}","RenderedMessage":"Configuration Result:\n\"[Success] Name compute.geometry\r\n[Success] DisplayName rhino.compute\r\n[Success] Description rhino.compute\r\n[Success] ServiceName compute.geometry\"","Properties":{"0":"[Success] Name compute.geometry\r\n[Success] DisplayName rhino.compute\r\n[Success] Description rhino.compute\r\n[Success] ServiceName compute.geometry","SourceContext":"Topshelf.HostFactory"}}
{"Timestamp":"2022-01-26T17:27:32.5274278+00:00","Level":"Information","MessageTemplate":"{0} v{1}, .NET Framework v{2}","RenderedMessage":"\"Topshelf\" v\"4.1.0.172\", .NET Framework v\"4.0.30319.42000\"","Properties":{"0":"Topshelf","1":"4.1.0.172","2":"4.0.30319.42000","SourceContext":"Topshelf.HostConfigurators.HostConfiguratorImpl"}}
{"Timestamp":"2022-01-26T17:27:32.5899442+00:00","Level":"Information","MessageTemplate":"Launching RhinoCore library as {User}","RenderedMessage":"Launching RhinoCore library as \"RhinoComputeAppPool\"","Properties":{"User":"RhinoComputeAppPool"}}
{"Timestamp":"2022-01-26T17:27:38.5749209+00:00","Level":"Error","MessageTemplate":"An exception occurred","RenderedMessage":"An exception occurred","Exception":"System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component.\r\n   at Rhino.Runtime.InProcess.RhinoCore.InternalStartup(Int32 argc, String[] argv, StartupInfo& info, IntPtr hostWnd)\r\n   at Rhino.Runtime.InProcess.RhinoCore..ctor(String[] args, WindowStyle windowStyle, IntPtr hostWnd)\r\n   at compute.geometry.OwinSelfHost.Start(HostControl hctrl) in /home/runner/work/compute.rhino3d/compute.rhino3d/src/compute.geometry/Program.cs:line 106\r\n   at Topshelf.Builders.ControlServiceBuilder`1.ControlServiceHandle.Start(HostControl hostControl)\r\n   at Topshelf.Hosts.ConsoleRunHost.Run()","Properties":{"SourceContext":"Topshelf.Hosts.ConsoleRunHost"}}
{"Timestamp":"2022-01-26T18:48:41.1782877+00:00","Level":"Information","MessageTemplate":"Compute {ComputeVersion}, Rhino {RhinoVersion}","RenderedMessage":"Compute \"1.0.0.0\", Rhino \"7.14.22010.17001\"","Properties":{"ComputeVersion":"1.0.0.0","RhinoVersion":"7.14.22010.17001"}}
{"Timestamp":"2022-01-26T18:48:41.4751726+00:00","Level":"Information","MessageTemplate":"Configuration Result:\n{0}","RenderedMessage":"Configuration Result:\n\"[Success] Name compute.geometry\r\n[Success] DisplayName rhino.compute\r\n[Success] Description rhino.compute\r\n[Success] ServiceName compute.geometry\"","Properties":{"0":"[Success] Name compute.geometry\r\n[Success] DisplayName rhino.compute\r\n[Success] Description rhino.compute\r\n[Success] ServiceName compute.geometry","SourceContext":"Topshelf.HostFactory"}}
{"Timestamp":"2022-01-26T18:48:41.4751726+00:00","Level":"Information","MessageTemplate":"{0} v{1}, .NET Framework v{2}","RenderedMessage":"\"Topshelf\" v\"4.1.0.172\", .NET Framework v\"4.0.30319.42000\"","Properties":{"0":"Topshelf","1":"4.1.0.172","2":"4.0.30319.42000","SourceContext":"Topshelf.HostConfigurators.HostConfiguratorImpl"}}
{"Timestamp":"2022-01-26T18:48:41.5532849+00:00","Level":"Information","MessageTemplate":"Launching RhinoCore library as {User}","RenderedMessage":"Launching RhinoCore library as \"RhinoComputeAppPool\"","Properties":{"User":"RhinoComputeAppPool"}}
{"Timestamp":"2022-01-26T18:48:44.5064259+00:00","Level":"Error","MessageTemplate":"An exception occurred","RenderedMessage":"An exception occurred","Exception":"System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component.\r\n   at Rhino.Runtime.InProcess.RhinoCore.InternalStartup(Int32 argc, String[] argv, StartupInfo& info, IntPtr hostWnd)\r\n   at Rhino.Runtime.InProcess.RhinoCore..ctor(String[] args, WindowStyle windowStyle, IntPtr hostWnd)\r\n   at compute.geometry.OwinSelfHost.Start(HostControl hctrl) in /home/runner/work/compute.rhino3d/compute.rhino3d/src/compute.geometry/Program.cs:line 106\r\n   at Topshelf.Builders.ControlServiceBuilder`1.ControlServiceHandle.Start(HostControl hostControl)\r\n   at Topshelf.Hosts.ConsoleRunHost.Run()","Properties":{"SourceContext":"Topshelf.Hosts.ConsoleRunHost"}}
{"Timestamp":"2022-01-26T19:10:22.6007602+00:00","Level":"Information","MessageTemplate":"Compute {ComputeVersion}, Rhino {RhinoVersion}","RenderedMessage":"Compute \"1.0.0.0\", Rhino \"7.14.22010.17001\"","Properties":{"ComputeVersion":"1.0.0.0","RhinoVersion":"7.14.22010.17001"}}
{"Timestamp":"2022-01-26T19:10:22.9288580+00:00","Level":"Information","MessageTemplate":"Configuration Result:\n{0}","RenderedMessage":"Configuration Result:\n\"[Success] Name compute.geometry\r\n[Success] DisplayName rhino.compute\r\n[Success] Description rhino.compute\r\n[Success] ServiceName compute.geometry\"","Properties":{"0":"[Success] Name compute.geometry\r\n[Success] DisplayName rhino.compute\r\n[Success] Description rhino.compute\r\n[Success] ServiceName compute.geometry","SourceContext":"Topshelf.HostFactory"}}
{"Timestamp":"2022-01-26T19:10:22.9445001+00:00","Level":"Information","MessageTemplate":"{0} v{1}, .NET Framework v{2}","RenderedMessage":"\"Topshelf\" v\"4.1.0.172\", .NET Framework v\"4.0.30319.42000\"","Properties":{"0":"Topshelf","1":"4.1.0.172","2":"4.0.30319.42000","SourceContext":"Topshelf.HostConfigurators.HostConfiguratorImpl"}}
{"Timestamp":"2022-01-26T19:10:23.4288111+00:00","Level":"Information","MessageTemplate":"Launching RhinoCore library as {User}","RenderedMessage":"Launching RhinoCore library as \"RhinoComputeAppPool\"","Properties":{"User":"RhinoComputeAppPool"}}
{"Timestamp":"2022-01-26T19:10:28.3502845+00:00","Level":"Error","MessageTemplate":"An exception occurred","RenderedMessage":"An exception occurred","Exception":"System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component.\r\n   at Rhino.Runtime.InProcess.RhinoCore.InternalStartup(Int32 argc, String[] argv, StartupInfo& info, IntPtr hostWnd)\r\n   at Rhino.Runtime.InProcess.RhinoCore..ctor(String[] args, WindowStyle windowStyle, IntPtr hostWnd)\r\n   at compute.geometry.OwinSelfHost.Start(HostControl hctrl) in /home/runner/work/compute.rhino3d/compute.rhino3d/src/compute.geometry/Program.cs:line 106\r\n   at Topshelf.Builders.ControlServiceBuilder`1.ControlServiceHandle.Start(HostControl hostControl)\r\n   at Topshelf.Hosts.ConsoleRunHost.Run()","Properties":{"SourceContext":"Topshelf.Hosts.ConsoleRunHost"}}
{"Timestamp":"2022-01-26T19:21:51.9825098+00:00","Level":"Information","MessageTemplate":"Compute {ComputeVersion}, Rhino {RhinoVersion}","RenderedMessage":"Compute \"1.0.0.0\", Rhino \"7.14.22010.17001\"","Properties":{"ComputeVersion":"1.0.0.0","RhinoVersion":"7.14.22010.17001"}}
{"Timestamp":"2022-01-26T19:21:52.2167932+00:00","Level":"Information","MessageTemplate":"Configuration Result:\n{0}","RenderedMessage":"Configuration Result:\n\"[Success] Name compute.geometry\r\n[Success] DisplayName rhino.compute\r\n[Success] Description rhino.compute\r\n[Success] ServiceName compute.geometry\"","Properties":{"0":"[Success] Name compute.geometry\r\n[Success] DisplayName rhino.compute\r\n[Success] Description rhino.compute\r\n[Success] ServiceName compute.geometry","SourceContext":"Topshelf.HostFactory"}}
{"Timestamp":"2022-01-26T19:21:52.2323975+00:00","Level":"Information","MessageTemplate":"{0} v{1}, .NET Framework v{2}","RenderedMessage":"\"Topshelf\" v\"4.1.0.172\", .NET Framework v\"4.0.30319.42000\"","Properties":{"0":"Topshelf","1":"4.1.0.172","2":"4.0.30319.42000","SourceContext":"Topshelf.HostConfigurators.HostConfiguratorImpl"}}
{"Timestamp":"2022-01-26T19:21:52.4198325+00:00","Level":"Information","MessageTemplate":"Launching RhinoCore library as {User}","RenderedMessage":"Launching RhinoCore library as \"RhinoComputeAppPool\"","Properties":{"User":"RhinoComputeAppPool"}}
{"Timestamp":"2022-01-26T19:21:57.2303647+00:00","Level":"Error","MessageTemplate":"An exception occurred","RenderedMessage":"An exception occurred","Exception":"System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component.\r\n   at Rhino.Runtime.InProcess.RhinoCore.InternalStartup(Int32 argc, String[] argv, StartupInfo& info, IntPtr hostWnd)\r\n   at Rhino.Runtime.InProcess.RhinoCore..ctor(String[] args, WindowStyle windowStyle, IntPtr hostWnd)\r\n   at compute.geometry.OwinSelfHost.Start(HostControl hctrl) in /home/runner/work/compute.rhino3d/compute.rhino3d/src/compute.geometry/Program.cs:line 106\r\n   at Topshelf.Builders.ControlServiceBuilder`1.ControlServiceHandle.Start(HostControl hostControl)\r\n   at Topshelf.Hosts.ConsoleRunHost.Run()","Properties":{"SourceContext":"Topshelf.Hosts.ConsoleRunHost"}}

Here is the other one

{"Timestamp":"2022-01-27T08:05:53.4682430+00:00","Level":"Information","MessageTemplate":"Compute {ComputeVersion}, Rhino {RhinoVersion}","RenderedMessage":"Compute \"1.0.0.0\", Rhino \"7.14.22010.17001\"","Properties":{"ComputeVersion":"1.0.0.0","RhinoVersion":"7.14.22010.17001"}}
{"Timestamp":"2022-01-27T08:05:53.7026043+00:00","Level":"Information","MessageTemplate":"Configuration Result:\n{0}","RenderedMessage":"Configuration Result:\n\"[Success] Name compute.geometry\r\n[Success] DisplayName rhino.compute\r\n[Success] Description rhino.compute\r\n[Success] ServiceName compute.geometry\"","Properties":{"0":"[Success] Name compute.geometry\r\n[Success] DisplayName rhino.compute\r\n[Success] Description rhino.compute\r\n[Success] ServiceName compute.geometry","SourceContext":"Topshelf.HostFactory"}}
{"Timestamp":"2022-01-27T08:05:53.7026043+00:00","Level":"Information","MessageTemplate":"{0} v{1}, .NET Framework v{2}","RenderedMessage":"\"Topshelf\" v\"4.1.0.172\", .NET Framework v\"4.0.30319.42000\"","Properties":{"0":"Topshelf","1":"4.1.0.172","2":"4.0.30319.42000","SourceContext":"Topshelf.HostConfigurators.HostConfiguratorImpl"}}
{"Timestamp":"2022-01-27T08:05:53.9838597+00:00","Level":"Information","MessageTemplate":"Launching RhinoCore library as {User}","RenderedMessage":"Launching RhinoCore library as \"RhinoComputeAppPool\"","Properties":{"User":"RhinoComputeAppPool"}}
{"Timestamp":"2022-01-27T08:05:58.9682194+00:00","Level":"Error","MessageTemplate":"An exception occurred","RenderedMessage":"An exception occurred","Exception":"System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component.\r\n   at Rhino.Runtime.InProcess.RhinoCore.InternalStartup(Int32 argc, String[] argv, StartupInfo& info, IntPtr hostWnd)\r\n   at Rhino.Runtime.InProcess.RhinoCore..ctor(String[] args, WindowStyle windowStyle, IntPtr hostWnd)\r\n   at compute.geometry.OwinSelfHost.Start(HostControl hctrl) in /home/runner/work/compute.rhino3d/compute.rhino3d/src/compute.geometry/Program.cs:line 106\r\n   at Topshelf.Builders.ControlServiceBuilder`1.ControlServiceHandle.Start(HostControl hostControl)\r\n   at Topshelf.Hosts.ConsoleRunHost.Run()","Properties":{"SourceContext":"Topshelf.Hosts.ConsoleRunHost"}}
{"Timestamp":"2022-01-27T08:20:00.3125211+00:00","Level":"Information","MessageTemplate":"Compute {ComputeVersion}, Rhino {RhinoVersion}","RenderedMessage":"Compute \"1.0.0.0\", Rhino \"7.14.22010.17001\"","Properties":{"ComputeVersion":"1.0.0.0","RhinoVersion":"7.14.22010.17001"}}
{"Timestamp":"2022-01-27T08:20:00.5626478+00:00","Level":"Information","MessageTemplate":"Configuration Result:\n{0}","RenderedMessage":"Configuration Result:\n\"[Success] Name compute.geometry\r\n[Success] DisplayName rhino.compute\r\n[Success] Description rhino.compute\r\n[Success] ServiceName compute.geometry\"","Properties":{"0":"[Success] Name compute.geometry\r\n[Success] DisplayName rhino.compute\r\n[Success] Description rhino.compute\r\n[Success] ServiceName compute.geometry","SourceContext":"Topshelf.HostFactory"}}
{"Timestamp":"2022-01-27T08:20:00.5626478+00:00","Level":"Information","MessageTemplate":"{0} v{1}, .NET Framework v{2}","RenderedMessage":"\"Topshelf\" v\"4.1.0.172\", .NET Framework v\"4.0.30319.42000\"","Properties":{"0":"Topshelf","1":"4.1.0.172","2":"4.0.30319.42000","SourceContext":"Topshelf.HostConfigurators.HostConfiguratorImpl"}}
{"Timestamp":"2022-01-27T08:20:00.7502305+00:00","Level":"Information","MessageTemplate":"Launching RhinoCore library as {User}","RenderedMessage":"Launching RhinoCore library as \"RhinoComputeAppPool\"","Properties":{"User":"RhinoComputeAppPool"}}
{"Timestamp":"2022-01-27T08:20:06.3465767+00:00","Level":"Error","MessageTemplate":"An exception occurred","RenderedMessage":"An exception occurred","Exception":"System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component.\r\n   at Rhino.Runtime.InProcess.RhinoCore.InternalStartup(Int32 argc, String[] argv, StartupInfo& info, IntPtr hostWnd)\r\n   at Rhino.Runtime.InProcess.RhinoCore..ctor(String[] args, WindowStyle windowStyle, IntPtr hostWnd)\r\n   at compute.geometry.OwinSelfHost.Start(HostControl hctrl) in /home/runner/work/compute.rhino3d/compute.rhino3d/src/compute.geometry/Program.cs:line 106\r\n   at Topshelf.Builders.ControlServiceBuilder`1.ControlServiceHandle.Start(HostControl hostControl)\r\n   at Topshelf.Hosts.ConsoleRunHost.Run()","Properties":{"SourceContext":"Topshelf.Hosts.ConsoleRunHost"}}

Thanks for reporting this. I am aware of this issue and am investigating. I’ll report back shortly.

@blind The errors seen below are typically indicative that there is a problem with Rhino getting a valid license.

System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component.

I’m wondering if there could be a typo when you entered your Core-Hour billing Auth Token, or how it was stored in the environment variable. Here’s what I would recommend. First, goto this guide and follow the instructions on retrieving your Auth Token from the Rhino portal. Once you see your Auth Token displayed on the screen, click the “Copy” button to copy the entire string of text.

Next, go into your VM and click on the search bar and start typing “Environ”. You should see a link that says “Edit the system environment variables”. Click that and in the System Properties dialog click on the button at the bottom which says Environment Variables. In the System Variables list scroll down till you see the variable RHINO_TOKEN. Click on that row and select Edit. In the Variable Value input, replace the existing string with that you just copied from the Rhino portal.

Restart your AWS instance and then try to hit the /activechildren endpoint. Hopefully at this point, you will see an integer value greater than zero.

thanks so far @AndyPayne,

unfortunately this didn’t solve the problem.
Just to be sure I also generated a new Rhino Token and started a new server Instance with that, triple checked it, but still cant connect hops to it or get any /activechildren.

log shows the same error

{"Timestamp":"2022-01-27T15:48:35.6493399+00:00","Level":"Information","MessageTemplate":"Compute {ComputeVersion}, Rhino {RhinoVersion}","RenderedMessage":"Compute \"1.0.0.0\", Rhino \"7.14.22010.17001\"","Properties":{"ComputeVersion":"1.0.0.0","RhinoVersion":"7.14.22010.17001"}}
{"Timestamp":"2022-01-27T15:48:35.9149690+00:00","Level":"Information","MessageTemplate":"Configuration Result:\n{0}","RenderedMessage":"Configuration Result:\n\"[Success] Name compute.geometry\r\n[Success] DisplayName rhino.compute\r\n[Success] Description rhino.compute\r\n[Success] ServiceName compute.geometry\"","Properties":{"0":"[Success] Name compute.geometry\r\n[Success] DisplayName rhino.compute\r\n[Success] Description rhino.compute\r\n[Success] ServiceName compute.geometry","SourceContext":"Topshelf.HostFactory"}}
{"Timestamp":"2022-01-27T15:48:35.9305917+00:00","Level":"Information","MessageTemplate":"{0} v{1}, .NET Framework v{2}","RenderedMessage":"\"Topshelf\" v\"4.1.0.172\", .NET Framework v\"4.0.30319.42000\"","Properties":{"0":"Topshelf","1":"4.1.0.172","2":"4.0.30319.42000","SourceContext":"Topshelf.HostConfigurators.HostConfiguratorImpl"}}
{"Timestamp":"2022-01-27T15:48:35.9774661+00:00","Level":"Information","MessageTemplate":"Launching RhinoCore library as {User}","RenderedMessage":"Launching RhinoCore library as \"RhinoComputeAppPool\"","Properties":{"User":"RhinoComputeAppPool"}}
{"Timestamp":"2022-01-27T15:48:43.1337198+00:00","Level":"Error","MessageTemplate":"An exception occurred","RenderedMessage":"An exception occurred","Exception":"System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component.\r\n   at Rhino.Runtime.InProcess.RhinoCore.InternalStartup(Int32 argc, String[] argv, StartupInfo& info, IntPtr hostWnd)\r\n   at Rhino.Runtime.InProcess.RhinoCore..ctor(String[] args, WindowStyle windowStyle, IntPtr hostWnd)\r\n   at compute.geometry.OwinSelfHost.Start(HostControl hctrl) in /home/runner/work/compute.rhino3d/compute.rhino3d/src/compute.geometry/Program.cs:line 106\r\n   at Topshelf.Builders.ControlServiceBuilder`1.ControlServiceHandle.Start(HostControl hostControl)\r\n   at Topshelf.Hosts.ConsoleRunHost.Run()","Properties":{"SourceContext":"Topshelf.Hosts.ConsoleRunHost"}}

Ok. This still seems really odd. Can you try one thing for me. The bootstrap script automatically installs Rhino on that machine. Can you try to launch Rhino.exe on that machine (it should have placed a shortcut on the desktop). If the RHINO_TOKEN is set, then Rhino should start straightaway without asking for a license. That might help us narrow down where the issue might be coming from.

Thanks so much for taking the time.
Initially rhino wouldn’t start, so I generated another new token and set the environment variable to that and everything works great now.
So I guess I did screw up with the Tokens after all

:sweat:

Great. I’m glad its working now. I was running out of ideas :slight_smile:

Sorry @AndyPayne, me again.

I tried following the updated tutorial on an aws server instance described here:

and ran into a couple issues:

Executing the bootstrap script to install the iis throws errors when trying to create the new “RhinoComputeUser”-User
Rerunning the script did manage to create that user though.
However after that I can not get the server to respond to hops requests. The used scripts do work perfectly fine with a server setup with the bootstrap file from two months ago.

Also the /healthcheck and /activechildren endpoints now respond with “missing API token”. This could be intended behaviour though I guess.

Could you confirm that the setup should be working correctly in it’s current form?

Hi @blind. This is strange. Can you provide any error logs when you say it couldn’t create the RhinoComputeUser? But, then you re-ran the script and it did work? I’m confused a bit on this part.
Also, how are you sending your GET request for /healthcheck or /activechildren? Are you simply using Google Chrome? Or something like Postman? I think the reason you’re getting an error is that the production server required you to input an API Key as part of the bootstrap script. This was some arbitrary string that you created which authenticates your requests to the server. You need to include this API Key as part of the header to your requests so that the production server knows it’s you who is making a valid request and not just some random HTTP traffic (or a hacker). I recommend using an app like Postman, to send your requests because you have more control over the header information. Something like the image below should help you get started.

Hi @AndyPayne, thanks again for taking the time.

I set up another aws t2.medium server 2019 base instance for testing this again. Still can’t figure out what I did wrong.

Here is the log of the setup, no reported errors there.

**********************
Windows PowerShell transcript start
Start time: 20220514114519
Username: [redacted]\Administrator
RunAs User: [redacted]\Administrator
Configuration Name: 
Machine: [redacted] (Microsoft Windows NT 10.0.17763.0)
Host Application: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Process ID: 6368
PSVersion: 5.1.17763.2867
PSEdition: Desktop
PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.17763.2867
BuildVersion: 10.0.17763.2867
CLRVersion: 4.0.30319.42000
WSManStackVersion: 3.0
PSRemotingProtocolVersion: 2.3
SerializationVersion: 1.1.0.1
**********************
Transcript started, output file is C:\Users\Administrator\Desktop\bootstrap1.log
PS C:\Users\Administrator> $F="/bootstrap.zip";$T="$($Env:temp)\tmp$([convert]::tostring((get-random 65535),16).padleft(4,'0')).tmp"; New-Item -ItemType Directory -Path $T; iwr -useb https://raw.githubusercontent.com/mcneel/compute.rhino3d/master/script/production/bootstrap.zip -outfile $T$F; Expand-Archive $T$F -DestinationPath $T; Remove-Item $T$F;& "$T\boostrap_server.ps1" 


    Directory: C:\Users\ADMINI~1\AppData\Local\Temp\2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        5/14/2022  11:45 AM                tmp7aec.tmp
  # # # # # # # # # # # # # # # # # # # # #
  #                                       #
  #       R H I N O   C O M P U T E       #
  #                                       #
  #    B O O T S T R A P   S C R I P T    #
  #                                       #
  # # # # # # # # # # # # # # # # # # # # #
Root Script Path: C:\Users\Administrator\AppData\Local\Temp\2\tmp7aec.tmp

===>  Set environment variables

Setting environment variable: RHINO_TOKEN=***
Setting environment variable: RHINO_COMPUTE_KEY=64[redacted]
Setting environment variable: RHINO_COMPUTE_URLS=http://+:80

===>  Download latest Rhino 7


===>  Installing Rhino


===>  Configuring URL reservation (80 and 443)

Ok.
Ok.

===>  Installing IIS Role Services

Determining if all necessary IIS components have been installed
IIS-WebServerRole missing - installing

Path   :
Online : True

IIS-HttpRedirect missing - installing

Path   :
Online : True

NetFx4Extended-ASPNET45 missing - installing

Path   :
Online : True

IIS-NetFxExtensibility45 missing - installing

Path   :
Online : True

IIS-LoggingLibraries missing - installing

Path   :
Online : True

IIS-RequestMonitor missing - installing

Path   :
Online : True

IIS-HttpTracing missing - installing

Path   :
Online : True

IIS-IIS6ManagementCompatibility missing - installing

Path   :
Online : True

IIS-BasicAuthentication missing - installing

Path   :
Online : True

IIS-WindowsAuthentication missing - installing

Path   :
Online : True

IIS-ApplicationInit missing - installing

Path   :
Online : True

IIS-ISAPIExtensions missing - installing

Path   :
Online : True

IIS-ISAPIFilter missing - installing

Path   :
Online : True

IIS-ASPNET45 missing - installing

Path   :
Online : True

WAS-WindowsActivationService missing - installing

Path   :
Online : True

WAS-ConfigurationAPI missing - installing

Path   :
Online : True

WCF-HTTP-Activation45 missing - installing

Path   :
Online : True

WCF-TCP-Activation45 missing - installing

Path   :
Online : True

WCF-Pipe-Activation45 missing - installing

Path   :
Online : True


Success       : True
RestartNeeded : No
FeatureResult : {}
ExitCode      : NoChangeNeeded


Success       : True
RestartNeeded : No
FeatureResult : {Message Queuing, Message Queuing Server, Message Queuing Services, Message Queuing (MSMQ) Activation}
ExitCode      : Success


===>  All of the Necessary IIS Role Services have been installed


===>  Download and unzip latest build of compute from https://nightly.link/mcneel/compute.rhino3d/actions/artifacts/240222036.zip



    Directory: C:\


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        5/14/2022  11:57 AM                temp

===>  Download ASP.NET Core 5.0 Hosting Bundle


dotnet-hosting-5.0.13-win.exe downloaded


===>  Installing ASP.NET Core 5.0 Hosting Bundle

dotnet-hosting-5.0.13-win.exe installed

===>  Restarting IIS services

The following services are dependent on the Windows Process Activation Service service.
Stopping the Windows Process Activation Service service will also stop these services.

   Net.Msmq Listener Adapter
   Net.Pipe Listener Adapter
   Net.Tcp Listener Adapter
   World Wide Web Publishing Service

The Net.Msmq Listener Adapter service is stopping.
The Net.Msmq Listener Adapter service was stopped successfully.

The Net.Pipe Listener Adapter service is stopping.
The Net.Pipe Listener Adapter service was stopped successfully.

The Net.Tcp Listener Adapter service is stopping.
The Net.Tcp Listener Adapter service was stopped successfully.

The World Wide Web Publishing Service service is stopping.
The World Wide Web Publishing Service service was stopped successfully.

The Windows Process Activation Service service is stopping.
The Windows Process Activation Service service was stopped successfully.
The World Wide Web Publishing Service service is starting.
The World Wide Web Publishing Service service was started successfully.

===>  Creating a new user identity

VERBOSE: Performing the operation "Create new local user" on target "RhinoComputeUser".

AccountExpires         :
Description            : User identity passed to IIS RhinoComputeAppPool
Enabled                : True
FullName               :
PasswordChangeableDate : 5/14/2022 11:58:22 AM
PasswordExpires        :
UserMayChangePassword  : True
PasswordRequired       : False
PasswordLastSet        : 5/14/2022 11:58:22 AM
LastLogon              :
Name                   : RhinoComputeUser
SID                    : [redacted]
PrincipalSource        : Local
ObjectClass            : User


===>  Adding user to RDP user group


===>  Creating application pool


===>  Removing default website


===>  Creating new rhino.compute site


Name         : Rhino.Compute
ID           : 2
State        : Started
PhysicalPath : C:\inetpub\wwwroot\aspnet_client\system_web\4_0_30319\rhino.compute
Bindings     : Microsoft.IIs.PowerShell.Framework.ConfigurationElement


===>  Granting application pool permissions on compute directories

Successfully processed 316 files; Failed processing 0 files
Successfully processed 20 files; Failed processing 0 files

===>  Setting environment variable for log paths

Setting environment variable: RHINO_COMPUTE_LOG_PATH=C:\inetpub\wwwroot\aspnet_client\system_web\4_0_30319\rhino.compute\logs

===>  Starting rhino.compute site

Congratulations! All components have now been installed.

To install third party plugins follow these steps
  1) Log into your VM using these credentials (write these down)
     User Name: RhinoComputeUser
     Password: [redacted]
  2) Install plugins using the Rhino package manager or
  3) Copy/paste plugin files to C:\Users\RhinoComputeUser\AppData\Roaming\Grasshopper\Libraries
  4) Restart the VM

Please save the User Name and Password above for your records!


PS C:\Users\Administrator> net user

User accounts for \\[redacted]

-------------------------------------------------------------------------------
Administrator            DefaultAccount           Guest
RhinoComputeUser         WDAGUtilityAccount
The command completed successfully.
PS C:\Users\Administrator> Stop-Transcript
**********************
Windows PowerShell transcript end
End time: 20220514115913
**********************

After running the script no new Windows user was showing up in C:/Users/, the RhinoComputeUser did however show up when running “net user” in powershell.

I was aware I needed to set an API key during setup. I just noticed that the /activechildren and /healthcheck endpoints didn’t require the key before ~Jan 2022, sorry for the confusion.
Host replies correctly to those when setting the API key in the header like you showed.

On the host:
I confirmed that the API-key and the Rhino token are set correctly in the environment variables.
Rhino is starting.
All ports were set to be open.

On the client machine I’m running Rhino 7.18, hops 0.13.1

result of a hops request within grasshopper:

script is this:

Hi @blind. I haven’t forgotten about this question. There are a couple of changes that were made to the code base recently which caused some of the issues you’re seeing right now. I’m working on a fix and hope to have a new solution soon.

1 Like

Hi Andy. I believe I’m affected by this bug as well. Having very similar issues to @blind.

Here are a few logs that may be helpful:

{"Timestamp":"2022-05-17T17:59:59.2458429+00:00","Level":"Information","MessageTemplate":"(1/2) Loading grasshopper","RenderedMessage":"(1/2) Loading grasshopper","Properties":{"Port":"6001"}}
{"Timestamp":"2022-05-17T18:00:09.6052279+00:00","Level":"Information","MessageTemplate":"(2/2) Loading compute plug-ins","RenderedMessage":"(2/2) Loading compute plug-ins","Properties":{"Port":"6001"}}
{"Timestamp":"2022-05-17T18:00:11.1833401+00:00","Level":"Information","MessageTemplate":"The {0} service is now running, press Control+C to exit.","RenderedMessage":"The \"compute.geometry\" service is now running, press Control+C to exit.","Properties":{"0":"compute.geometry","SourceContext":"Topshelf.Hosts.ConsoleRunHost","Port":"6001"}}
{"Timestamp":"2022-05-17T18:00:23.4489627+00:00","Level":"Information","MessageTemplate":"::1 - [2022-05-17T18:00:23.4489627+00:00] \"POST /io HTTP/1.1\" 200 -","RenderedMessage":"::1 - [2022-05-17T18:00:23.4489627+00:00] \"POST /io HTTP/1.1\" 200 -","Properties":{"Port":"6001"}}
{"Timestamp":"2022-05-17T18:00:25.4958347+00:00","Level":"Error","MessageTemplate":"An exception occured while processing request","RenderedMessage":"An exception occured while processing request","Exception":"System.NullReferenceException: Object reference not set to an instance of an object.\r\n   at compute.geometry.GrasshopperDefinition.SetInputs(List`1 values) in /home/runner/work/compute.rhino3d/compute.rhino3d/src/compute.geometry/GrasshopperDefinition.cs:line 334\r\n   at compute.geometry.ResthopperEndpointsModule.GrasshopperSolveHelper(Schema input, String body, Stopwatch stopwatch) in /home/runner/work/compute.rhino3d/compute.rhino3d/src/compute.geometry/ResthopperEndpoints.cs:line 111\r\n   at compute.geometry.ResthopperEndpointsModule.Grasshopper(NancyContext ctx) in /home/runner/work/compute.rhino3d/compute.rhino3d/src/compute.geometry/ResthopperEndpoints.cs:line 172\r\n   at Nancy.Routing.Route.<>c__DisplayClass4.<Wrap>b__3(Object parameters, CancellationToken context)","Properties":{"Port":"6001"}}
{"Timestamp":"2022-05-17T18:00:27.4333476+00:00","Level":"Information","MessageTemplate":"::1 - [2022-05-17T18:00:27.4333476+00:00] \"POST /grasshopper HTTP/1.1\" 500 -","RenderedMessage":"::1 - [2022-05-17T18:00:27.4333476+00:00] \"POST /grasshopper HTTP/1.1\" 500 -","Properties":{"Port":"6001"}}
{"Timestamp":"2022-05-17T18:05:11.9748918+00:00","Level":"Error","MessageTemplate":"An exception occured while processing request","RenderedMessage":"An exception occured while processing request","Exception":"System.NullReferenceException: Object reference not set to an instance of an object.\r\n   at compute.geometry.GrasshopperDefinition.SetInputs(List`1 values) in /home/runner/work/compute.rhino3d/compute.rhino3d/src/compute.geometry/GrasshopperDefinition.cs:line 334\r\n   at compute.geometry.ResthopperEndpointsModule.GrasshopperSolveHelper(Schema input, String body, Stopwatch stopwatch) in /home/runner/work/compute.rhino3d/compute.rhino3d/src/compute.geometry/ResthopperEndpoints.cs:line 111\r\n   at compute.geometry.ResthopperEndpointsModule.Grasshopper(NancyContext ctx) in /home/runner/work/compute.rhino3d/compute.rhino3d/src/compute.geometry/ResthopperEndpoints.cs:line 172\r\n   at Nancy.Routing.Route.<>c__DisplayClass4.<Wrap>b__3(Object parameters, CancellationToken context)","Properties":{"Port":"6001"}}
{"Timestamp":"2022-05-17T18:05:12.1624086+00:00","Level":"Information","MessageTemplate":"::1 - [2022-05-17T18:05:12.1624086+00:00] \"POST /grasshopper HTTP/1.1\" 500 -","RenderedMessage":"::1 - [2022-05-17T18:05:12.1624086+00:00] \"POST /grasshopper HTTP/1.1\" 500 -","Properties":{"Port":"6001"}}

Hi @user389 and @blind. I believe I have fixed the issue that you’re seeing. I’ve updated the bootstrap script. It now follows a two-step process which requires your VM to restart in the middle. It’s all described here. If you’re starting from scratch (a clean VM) then I would recommend following the guide above.
If however, you’ve already had a deployment that was working with IIS and you simply need to update either Rhino and/or Rhino.Compute… then I would recommend following these steps.
The main reason these issues have crept in is because of some of the changes that I made recently to the code base which allows hops to now create parameters with Data Tree access (item and list access were the only allowed access types before). With this change, I made a few modifications to how geometry types get passed in as well. This all works great with 7.19, but it was throwing some errors with Rhino builds pre-7.19. The fixes I implemented should now make any Rhino version to work properly… however we are releasing a new service release of 7.19 later tonight. When that release comes out, I plan to release a new build of Hops (0.14.0) which should allow the Data Tree access feature I mentioned before. Anyway, I believe if you follow the install scripts above and install a new version of Rhino.Compute, that it should fix the issues you were having with the null exception error.

In summation… @user389 I think since you seem to already have had a working IIS setup, I would simply recommend updating both Rhino and Rhino.Compute to the latest version. @blind, since I’m not sure you were ever able to get a working version, I would recommend spinning up a brand new clean instance and follow the two-step guide to setting up a new installation.

1 Like

Thanks Andy! The clean install did the trick.

I also tried to run the updater (as documented here) but that completely broke the VM. Doing a simple test from Postman, I get the following error:

HTTP Error 500.32 - Failed to load .NET Core host

If you go to C:\inetpub\wwwroot\aspnet_client\system_web\4_0_30319\rhino.compute\logs\ on your VM, you should be able to view the logs of both rhino.compute and compute.geometry. Do any of those logs tell you anything?
Also, how did running the updater scripts “break” the VM?

Post update, the logs directory is gone. After running the update, it seems that all rhino.compute services and endpoints are inaccessible. I’ve rebooted the VM and tried restarting IIS and the Rhino.Compute pool. All requests to the server result in the 500 error that I posted above.

Hmm. This sounds really strange. Was this a clean install (meaning you followed the two step installation)? Or was this just updating Rhino and/or Compute? They are two different processes, but if you follow the two-step installation for a clean install then you don’t need to do the Update part because you’re already going to be installing all of the latest applications and build files.

Are you able to launch Rhino in your VM by clicking on the Rhino icon on the VM’s desktop? I’m wondering if it’s able to find a license. Can you confirm that Rhino launches correctly?

One VM I setup from scratch with the two step installation that you provided - that worked flawlessly.
The other VM I had setup a few days ago (before the two step installation) and I attempted to update Compute with the instructions provided - that is the VM that no longer works. I just tested it and Rhino opens up fine, but I still can’t access any endpoints.

Just to be clear, I have an up-to-date IIS with Compute instance. I’m just calling out that the updater didn’t work for me, so there might be a bug in that process. Happy to provide more information as needed.

Ah. ok. Thanks for the clarification. I’m glad you have at least one VM up and working. I’ll check out the update scripts and see what’s going on there. Thanks again.

Thanks again for the help Andy.