POST
|
(Updated screenshot to show the variable names in the Conditions and Server Variables sections, and fine tuned regular expressions in Conditions section.)
... View more
06-01-2018
04:04 PM
|
0
|
0
|
3206
|
POST
|
I think I have figured out the cause of this. It has to do with way IIS + ARR handles the request, but does not appear to be related to the special path used in 10.6 for internal requests. The issue seems to be with the Sec-WebSocket-Extensions header, for which Chrome and Firefox pass in a value of permessage-deflate. IIS + ARR passes through this header to the back-end, and the upgraded version of Jetty appears to handle this extension, but it appears IIS + ARR does not know what to do with it. So, I added a rule to look for all requests with the Upgrade: websocket header, and strip out any Sec-WebSocket-Extensions header (actually, replace with a ";", which has the same effect) and it was then able to connect. A few notes: The rule needs to come before your actual rewrite rules that redirect to the proxy. It can have Action: None and should not Stop processing other rules (or else it will never get to your actual rewrite rule). It is not necessary to add HTTP_SEC_WEBSOCKET_EXTENSIONS to the Allowed Server Variables to make this work, as long as the rule is defined within the Global Rules set (i.e. together with the ARR rewrite rules). You can if you want, but you don't need to. The rule could be restricted to specific URLs, e.g. if there are other WebSockets on the same server that are not proxied to GeoEvent and do not require this treatment. In my case I allowed it for all requests that contain the Upgrade request header and a non-blank Sec-WebSocket-Extensions request header. If the Sec-WebSocket-Extensions header included any other extensions that we wanted to pass through, they would also be lost. This could be prevented by looking for a Sec-WebSocket-Extensions header that contains the permessage-deflate extension specifically, and retaining everything except permessage-deflate. This is not hard to do via regular expressions and back-references. But then what if some other extension gets requested by browsers in the future that IIS + ARR also does not support? I figure it's better to strip out all extensions, for all WebSocket requests that get proxied by IIS, for maximum compatibility. The header could also have been rewritten within the same rewrite rule that forwards to the server farm; it didn't need to be a separate rule. I just found it easier and cleaner for our environment to define it that way. Since this works, I can only assume that NGINX does not pass through this header at all, or else knows how to deal with per-message-deflated content, which might be why the issue was not detected in Esri's in-house testing, which I understand is primarily with NGINX. Screen shot attached...
... View more
06-01-2018
01:22 PM
|
2
|
2
|
3206
|
BLOG
|
I just stumbled upon this thread while researching an unrelated issue, but thought I would take a moment to supplement the information provided here, as I did get GeoEvent Extension 10.2.2 WebSockets working successfully with an IIS / ARR based reverse proxy solution a few years ago, and extended that to work with 10.3.x WebSockets and Stream Services last year. In 10.2.2 at least, it required an outbound rule to ensure that the Sec-WebSocket-Protocol header was included in the response if it was specified in the request. However, I disabled that rule in our 10.3.1 environment and it seemed to continue working. (I inferred that the difference may be in the StreamLayer API, which might not include the Sec-WebSocket-Protocol request header anymore. This header is optional in the request, but required in the response if it was included in the request.) With Stream Services in 10.3.x there were also some restrictions on naming conventions - e.g. services would not respond correctly when clients subscribe if they had an underscore in the name. However, we adjusted our names to work within this limitation, and during the past year we have successfully been using IIS + ARR for our stream services with 10.3.1 in a production setting. In addition, I changed the Idle time-out for the DefaultAppPool to 0 from the default of 20 minutes, since ARR uses this app pool and we would not want it shutting down when the connection is idle. This is set in the Advanced Properties of the app pool. I also disabled all caching for that server farm as follows: Finally, I should mention that all of our testing and production use during the past three years has been with the newer ARR 3.0, available through the Web Platform Installer, not with the older ARR 2.5. In this version I access the URL Rewrite settings via the Routing Rules under the server farm. Although it is also available under the Default Web Site Home as illustrated by Javier's screenshot and shows the same rules. Also, in ARR 3.0 we can reroute to a server farm by name, rather than rewriting the URL to point to a specific server as was done by Javier. Here is an excerpt from one of our inbound rules to illustrate. Finally, note that the Windows port of nginx is still beta quality only, according to their website, is not as stable as other platforms, and can only handle a maximum of 1024 concurrent connections. It is better now than it was a few years ago, but that was why I looked at ARR first. If our ARR based solution had not worked, our backup plan was to use a Linux based nginx virtual appliance.
... View more
06-16-2016
05:20 PM
|
1
|
0
|
2408
|
POST
|
Thanks to Esri Technical Support for help recently with this same question! It turns out there is a new system property "WebSocketContextURL" for this purpose, accessible via the ArcGIS for Server rest admin API. Log in e.g. via http://locallost:6080/arcgis/rest/admin, use admin credentials, navigate to system -> properties -> update, and specify your reverse proxy URL in the JSON. If the reverse proxy does not does not place /arcgis/ws/services at root, include the full path up to and including /arcgis, e.g. { "WebSocketContextURL" : "wss://exposed.server/prefix/arcgis" }.
... View more
02-04-2015
04:59 PM
|
5
|
0
|
3831
|
POST
|
[mattlane86]> update dojo v. 1.6 for the manager site That worked for me. Fully unsupported. Thanks Matt.
... View more
09-24-2013
12:59 PM
|
0
|
0
|
1041
|
POST
|
It's actually a bug that your workaround worked. When you add capabilities after publishing, it doesn't go through all the same checks and balances that the Analyzer performs when you publish or update the service. Feature Access capability is not supported when working with views. I encountered this when attempting to publish a Feature Layer with a Query Layer, which is also not supported. In my case, I added Feature Access capability after publishing the service, and all was well until I later tried to update the service. (I did not need Feature Access capability for that particular layer so I resolved it by putting it in a separate service.) For completeness I should mention that in 10.2 you can use Feature Access Capability with Query Layers. However, this is only supported if the query layer is referencing a table and not a view. That has to do with being able to support editing on enterprise spatial data even if it is not registered with the geodatabase, e.g. as a migration path for users of SDS. (Keep in mind also that "technically working" and "officially supported" are two different things - if you had a query layer referencing a view with INSTEAD OF triggers and a unique ID field, I'm not sure if the analyzer would know the difference. I have not tried it. However, there would be no guarantee that it wouldn't cause data corruption or that a future service pack or update won't break it; best avoided.)
... View more
09-10-2013
04:06 PM
|
0
|
0
|
1154
|
POST
|
Having reviewed the 10.2 final help, and the most recent beta training materials I had available, and the tech workshop in the UC proceedings, I find that I am facing a gap in the documentation for the built-in processors. Specifically, I wasn't able to find any info on the expression language used in the field calculator, or on any built-in functions that may be available e.g. for string manipulation, etc. I do have two screen shots from the beta materials, one showing an arithmetic expression to convert units, the other showing two fields concatenated with a literal string. These both showed a JavaScript-style notation, but beyond that I would be guessing. Likewise, I don't seem to have anything for the Regular Expression processor - e.g. which regex notation is used, whether captures and back-references are supported, etc. For one example, I was trying to figure out what expression syntax I could use to extract a substring from one field and concatenate that with the value of another field. I believe the functionality to do this is probably available in either of the built-in processors mentioned above, once I find out their respective expression formats. Another example, if supported: changing a string value to all upper case. Yet another: rounding off a numeric value. I just don't know if there are built-in functions available in the Field Calculator to power these kinds of operations. Perhaps someone who attended live training, or a member of the GeoEvent team can help out? Thanks!
... View more
08-09-2013
01:33 PM
|
0
|
2
|
5152
|
POST
|
Blend is not part of Visual Studio; Expression Studio is a separate suite. VS2010 does include a basic design canvas for WPF / Silverlight, which might be adequate for some business-style applications (e.g. conservative look and feel, simple layout), but it's pretty limiting if you want to make a visually compelling RIA. Likewise, Visual Studio is a far superior coding / debugging environment, although Blend does have a rudimentary source code editor for VB / C#. If you have both products, they are loosely integrated via "Open in [product]" options on the context menus. Blend can also leverage other editors through a generic "Edit Externally" right-click option (based on Windows file associations). Right now I am trying out the free Visual Studio Express together with the 60-day trial of Expression Studio 4 Ultimate (which includes Blend) on a new system. After I installed Blend, I reran the Silverlight API setup and got two new options to install the Esri templates in both Expression Blend and Visual Web Developer. (As for whether the templates work in both environments - well, on the VS side I am still plugging away, trying to sort out some broken dependencies. Meanwhile, on the Blend side everything just worked.)
... View more
09-01-2010
06:36 PM
|
0
|
0
|
931
|
Title | Kudos | Posted |
---|---|---|
1 | 06-16-2016 05:20 PM | |
2 | 06-01-2018 01:22 PM | |
5 | 02-04-2015 04:59 PM |
Online Status |
Offline
|
Date Last Visited |
11-11-2020
02:23 AM
|