See Robert's answers. The %File.Writeable(...) method's underlying implementation ($zutil(140,12,filename,2)=0) is apparently not able to determine whether or not a directory is writeable, despite the method doc stating "Return true if the file/directory is writable and false if it is not"

See this older doc for $zutil(140) information.

You could try raising the issue with InterSystems WRC, but my guess is they'll say it's a bug in the comment on the method.

The superserver port is recorded in the cache.cpf file, and I think it can be changed there by simply editing the file and then restarting Cache.

I'm guessing that the Cache installer uses the registry to discover the locations of the CPF files it needs to check when picking a "free" port to offer as the superserver port for a new instance. So if one of your instances wasn't properly registered at the time you installed another instance then the installer may have defaulted to a port that was actually already taken.

There's some documentation here.

In your case it sounds like a Cache instance was moved onto the server but not added to the registry that Cache's ccontrol command uses. On Windows I think Cache uses the Windows Registry. On other platforms it uses a file, and offers commands ccontrol create, ccontrol update and  ccontrol delete to maintain entries in this registry.

OK, I've just seen your version info in a comment on another answer.

Given you're using accessing port 80 on server xyz.x.edu I assume a regular webserver (e.g. IIS or Apache) has been set up on that server and the CSP Web Gateway added to it, then configured to connect to an InterSystems instance (perhaps on the same server, or perhaps elsewhere).

In that case, is your webserver set up to dispatch /api/atelier to the 2017.1 instance?

I also have a hunch that if your webserver is prepared to serve HTTP then it may be sufficient to make some server-side settings in Portal on your Caché / Ensemble server, as follows.

The settings are WebServerName, WebServerPort, and WebServerURLPrefix. These can be found in the Startup Settings ([System Administration] > [Configuration] > [Additional Settings] > [Startup Settings])

Doing this may mean you don't need to get each Studio user to change their settings. But it seems possible the server-side settings won't be able to make Studios use HTTPS for templates and add-ins rather than HTTP.

As noted by Keith Avery in his comment, the ListAll classmethod of %SYS.Namespace may also include implicit namespaces. This is mentioned in the class doc. I haven't verified, but I guess that you may get different results from ListAll() if you run it once immediately after Cache startup and again after Portal has been used to change namespace definitions (e.g. mappings).

ListAll() is implemented using calls to the undocumented $ZUTIL(90) function. I dug up some WRC information we received in 2010 about a change in behaviour in that function starting with Caché 2010.2. The summary was:

SML1081 - Support single namespace activation and reduce usage of mapping memory.

Using the extra info from Dinesh, here's what I did to investigate. Admittedly I was on a 2015.1.0 Ensemble on Windows, but the classes are unlikely to have many differences between this and his 2015.1.2 on Solaris.

First I cleared the read-only flag on the CACHELIB database that stores %Net.HttpRequest:

Then I loaded the class into Studio (for safety I set the read-only checkbox during opening), compiled it, used the View\View Other Code option (Ctrl+Shift+V) and jumped to the line of the error Dinesh reported.

I reset the "Always Mount Read-Only" checkbox on CACHELIB, to prevent accidental changes.

In the code several things caught my eye:

 

Maybe disable the GZIP feature on your SOAP adapters and see if the problem persists. Searching the InterSystems doc for the term GZIPOUTPUT may give you clues (I'm no expert in this area).

I also recommend you ask InterSystems Support (WRC) for help on this, particularly as you're running on a less common platform (Solaris).