[Geoserver-users] GeoServer 2.21 - Cascaded WMS returns Connection reset

Hello everyone,

I have a problem with Cascaded WMS’s on GeoServer 2.21.

Some layers frequently report the error ‘Connection reset’ while some layers works fine.

This problem does not occur in a previous version 2.17.1 (using the same geoserver_data directory).

I have tested the latest version 2.22.0 with the same result.

My environment is:

  • Windows Server 2016 Standard
  • Java: Eclipse Adoptium JRE 11.0.15.10 hotspot
  • Tomcat 9.0.65
  • GeoServer 2.21

Some Questions:

  • Is this a known problem?
  • Is there a way of increasing the logging in this area of GeoServer to see if the problem is in GeoServer or in the remote WMS server?
  • Any suggestions on how I can investigate this problem further?

Best Regards

Mattias Andrén

16 Dec 10:59:45 ERROR [data.ows] - Failed to execute request http://maps.lantmateriet.se/topowebb/wms/v1?REQUEST=GetMap&FORMAT=image/png&SRS=EPSG:3009&BBOX=147344.0,6594688.0,161680.0,6609024.0&VERSION=1.1.1&STYLES=&SERVICE=WMS&WIDTH=1024&HEIGHT=1024&TRANSPARENT=TRUE&LAYERS=topowebbkartan

16 Dec 10:59:45 ERROR [geoserver.ows] -

org.geoserver.platform.ServiceException: Error rendering coverage on the fast path

at org.geoserver.wms.map.RenderedImageMapOutputFormat.produceMap(RenderedImageMapOutputFormat.java:303)

at org.geoserver.wms.map.RenderedImageMapOutputFormat.produceMap(RenderedImageMapOutputFormat.java:205)

at org.geoserver.wms.map.RenderedImageMapOutputFormat.produceMap(RenderedImageMapOutputFormat.java:82)

at org.geoserver.wms.GetMap.executeInternal(GetMap.java:344)

at org.geoserver.wms.GetMap.run(GetMap.java:203)

at org.geoserver.wms.GetMap.run(GetMap.java:113)

at org.geoserver.wms.DefaultWebMapService.getMap(DefaultWebMapService.java:250)

at jdk.internal.reflect.GeneratedMethodAccessor330.invoke(Unknown Source)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.base/java.lang.reflect.Method.invoke(Unknown Source)

at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)

at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)

at org.geoserver.kml.WebMapServiceKmlInterceptor.invoke(WebMapServiceKmlInterceptor.java:38)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.geoserver.gwc.wms.CacheSeedingWebMapService.invoke(CacheSeedingWebMapService.java:57)

at org.geoserver.gwc.wms.CacheSeedingWebMapService.invoke(CacheSeedingWebMapService.java:32)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.geoserver.gwc.wms.CachingWebMapService.invoke(CachingWebMapService.java:74)

at org.geoserver.gwc.wms.CachingWebMapService.invoke(CachingWebMapService.java:43)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.geoserver.ows.util.RequestObjectLogger.invoke(RequestObjectLogger.java:29)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)

at com.sun.proxy.$Proxy125.getMap(Unknown Source)

at jdk.internal.reflect.GeneratedMethodAccessor347.invoke(Unknown Source)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.base/java.lang.reflect.Method.invoke(Unknown Source)

at org.geoserver.ows.Dispatcher.execute(Dispatcher.java:867)

at org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:268)

at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)

at org.geoserver.gwc.GWC.dispatchOwsRequest(GWC.java:1368)

at org.geoserver.gwc.layer.GeoServerTileLayer.dispatchGetMap(GeoServerTileLayer.java:693)

at org.geoserver.gwc.layer.GeoServerTileLayer.getMetatilingReponse(GeoServerTileLayer.java:613)

at org.geoserver.gwc.layer.GeoServerTileLayer.seedTile(GeoServerTileLayer.java:865)

at org.geowebcache.seed.SeedTask.doActionInternal(SeedTask.java:141)

at org.geowebcache.seed.GWCTask.doAction(GWCTask.java:78)

at org.geowebcache.seed.MTSeeder.call(MTSeeder.java:34)

at org.geowebcache.seed.MTSeeder.call(MTSeeder.java:23)

at org.geoserver.gwc.seed.SeederThreadLocalTransferExecutor.lambda$submit$1(SeederThreadLocalTransferExecutor.java:53)

at java.base/java.util.concurrent.FutureTask.run(Unknown Source)

at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.base/java.lang.Thread.run(Unknown Source)

Caused by: org.geoserver.platform.ServiceException: java.net.SocketException: Connection reset

at org.geoserver.wms.map.DirectRasterRenderer.render(DirectRasterRenderer.java:301)

at org.geoserver.wms.map.RenderedImageMapOutputFormat.produceMap(RenderedImageMapOutputFormat.java:301)

… 43 more

Caused by: java.net.SocketException: Connection reset

at java.base/java.net.SocketInputStream.read(Unknown Source)

at java.base/java.net.SocketInputStream.read(Unknown Source)

at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137)

at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153)

at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:282)

at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138)

at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56)

at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259)

at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)

at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:157)

at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273)

at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)

at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272)

at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)

at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)

at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)

at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)

at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)

at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)

at org.geotools.http.commons.MultithreadedHttpClient.executeMethod(MultithreadedHttpClient.java:174)

at org.geotools.http.commons.MultithreadedHttpClient.get(MultithreadedHttpClient.java:206)

at org.geotools.http.commons.MultithreadedHttpClient.get(MultithreadedHttpClient.java:186)

at org.geotools.data.ows.AbstractOpenWebService.internalIssueRequest(AbstractOpenWebService.java:455)

at org.geotools.ows.wms.WebMapServer.issueRequest(WebMapServer.java:454)

at org.geotools.ows.wms.map.WMSCoverageReader.getMap(WMSCoverageReader.java:338)

at org.geotools.ows.wms.map.WMSCoverageReader.read(WMSCoverageReader.java:321)

at org.geotools.renderer.lite.gridcoverage2d.GridCoverageReaderHelper.readSingleCoverage(GridCoverageReaderHelper.java:642)

at org.geotools.renderer.lite.gridcoverage2d.GridCoverageReaderHelper.readCoverage(GridCoverageReaderHelper.java:207)

at org.geotools.renderer.lite.gridcoverage2d.GridCoverageRenderer.renderImage(GridCoverageRenderer.java:705)

at org.geotools.renderer.lite.gridcoverage2d.GridCoverageRenderer.renderImage(GridCoverageRenderer.java:668)

at org.geoserver.wms.map.DirectRasterRenderer.readWithProjectionHandling(DirectRasterRenderer.java:720)

at org.geoserver.wms.map.DirectRasterRenderer.render(DirectRasterRenderer.java:245)

… 44 more

Mattias:

There is a way to increase the logging, see instruction here: https://docs.geoserver.org/stable/en/user/configuration/logging.html

Quickly the idea would be to make a custom logging configuration (copy one of the existing ones into a new file), and add some lines to log wms client interaction…

So the instructions have this example:

GeoTools Logger names match up with the package names in the project javadocs overview.
As an example package org.geotools.data.shapefile is listed, allowing level of shapefile logging to be controlled:



So I think you could use “org.geotools.ows.wms”:

Let us know what you find?

···


Jody Garnett

Thanks!

I tried increasing the logging as you suggested below, and It works.

I can now see the requests that are made.

I do not get any more information why the request is failing though.

Best Regards

Mattias Andrén

···

Från: Jody Garnett jody.garnett@anonymised.com
Skickat: den 18 december 2022 00:41
Till: Mattias Andrén mattias.andren@anonymised.com
Kopia: geoserver-users@lists.sourceforge.net
Ämne: Re: [Geoserver-users] GeoServer 2.21 - Cascaded WMS returns Connection reset

Mattias:

There is a way to increase the logging, see instruction here: https://docs.geoserver.org/stable/en/user/configuration/logging.html

Quickly the idea would be to make a custom logging configuration (copy one of the existing ones into a new file), and add some lines to log wms client interaction…

So the instructions have this example:

GeoTools Logger names match up with the package names in the project javadocs overview.
As an example package org.geotools.data.shapefile is listed, allowing level of shapefile logging to be controlled:



So I think you could use “org.geotools.ows.wms”:

Let us know what you find?

Jody Garnett

On Fri, Dec 16, 2022 at 6:05 AM Mattias Andrén via Geoserver-users <geoserver-users@lists.sourceforge.net> wrote:

Hello everyone,

I have a problem with Cascaded WMS’s on GeoServer 2.21.

Some layers frequently report the error ‘Connection reset’ while some layers works fine.

This problem does not occur in a previous version 2.17.1 (using the same geoserver_data directory).

I have tested the latest version 2.22.0 with the same result.

My environment is:

  • Windows Server 2016 Standard
  • Java: Eclipse Adoptium JRE 11.0.15.10 hotspot
  • Tomcat 9.0.65
  • GeoServer 2.21

Some Questions:

  • Is this a known problem?
  • Is there a way of increasing the logging in this area of GeoServer to see if the problem is in GeoServer or in the remote WMS server?
  • Any suggestions on how I can investigate this problem further?

Best Regards

Mattias Andrén

16 Dec 10:59:45 ERROR [data.ows] - Failed to execute request http://maps.lantmateriet.se/topowebb/wms/v1?REQUEST=GetMap&FORMAT=image/png&SRS=EPSG:3009&BBOX=147344.0,6594688.0,161680.0,6609024.0&VERSION=1.1.1&STYLES=&SERVICE=WMS&WIDTH=1024&HEIGHT=1024&TRANSPARENT=TRUE&LAYERS=topowebbkartan

16 Dec 10:59:45 ERROR [geoserver.ows] -

org.geoserver.platform.ServiceException: Error rendering coverage on the fast path

at org.geoserver.wms.map.RenderedImageMapOutputFormat.produceMap(RenderedImageMapOutputFormat.java:303)

at org.geoserver.wms.map.RenderedImageMapOutputFormat.produceMap(RenderedImageMapOutputFormat.java:205)

at org.geoserver.wms.map.RenderedImageMapOutputFormat.produceMap(RenderedImageMapOutputFormat.java:82)

at org.geoserver.wms.GetMap.executeInternal(GetMap.java:344)

at org.geoserver.wms.GetMap.run(GetMap.java:203)

at org.geoserver.wms.GetMap.run(GetMap.java:113)

at org.geoserver.wms.DefaultWebMapService.getMap(DefaultWebMapService.java:250)

at jdk.internal.reflect.GeneratedMethodAccessor330.invoke(Unknown Source)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.base/java.lang.reflect.Method.invoke(Unknown Source)

at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)

at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)

at org.geoserver.kml.WebMapServiceKmlInterceptor.invoke(WebMapServiceKmlInterceptor.java:38)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.geoserver.gwc.wms.CacheSeedingWebMapService.invoke(CacheSeedingWebMapService.java:57)

at org.geoserver.gwc.wms.CacheSeedingWebMapService.invoke(CacheSeedingWebMapService.java:32)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.geoserver.gwc.wms.CachingWebMapService.invoke(CachingWebMapService.java:74)

at org.geoserver.gwc.wms.CachingWebMapService.invoke(CachingWebMapService.java:43)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.geoserver.ows.util.RequestObjectLogger.invoke(RequestObjectLogger.java:29)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)

at com.sun.proxy.$Proxy125.getMap(Unknown Source)

at jdk.internal.reflect.GeneratedMethodAccessor347.invoke(Unknown Source)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.base/java.lang.reflect.Method.invoke(Unknown Source)

at org.geoserver.ows.Dispatcher.execute(Dispatcher.java:867)

at org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:268)

at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)

at org.geoserver.gwc.GWC.dispatchOwsRequest(GWC.java:1368)

at org.geoserver.gwc.layer.GeoServerTileLayer.dispatchGetMap(GeoServerTileLayer.java:693)

at org.geoserver.gwc.layer.GeoServerTileLayer.getMetatilingReponse(GeoServerTileLayer.java:613)

at org.geoserver.gwc.layer.GeoServerTileLayer.seedTile(GeoServerTileLayer.java:865)

at org.geowebcache.seed.SeedTask.doActionInternal(SeedTask.java:141)

at org.geowebcache.seed.GWCTask.doAction(GWCTask.java:78)

at org.geowebcache.seed.MTSeeder.call(MTSeeder.java:34)

at org.geowebcache.seed.MTSeeder.call(MTSeeder.java:23)

at org.geoserver.gwc.seed.SeederThreadLocalTransferExecutor.lambda$submit$1(SeederThreadLocalTransferExecutor.java:53)

at java.base/java.util.concurrent.FutureTask.run(Unknown Source)

at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.base/java.lang.Thread.run(Unknown Source)

Caused by: org.geoserver.platform.ServiceException: java.net.SocketException: Connection reset

at org.geoserver.wms.map.DirectRasterRenderer.render(DirectRasterRenderer.java:301)

at org.geoserver.wms.map.RenderedImageMapOutputFormat.produceMap(RenderedImageMapOutputFormat.java:301)

… 43 more

Caused by: java.net.SocketException: Connection reset

at java.base/java.net.SocketInputStream.read(Unknown Source)

at java.base/java.net.SocketInputStream.read(Unknown Source)

at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137)

at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153)

at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:282)

at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138)

at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56)

at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259)

at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)

at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:157)

at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273)

at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)

at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272)

at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)

at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)

at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)

at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)

at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)

at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)

at org.geotools.http.commons.MultithreadedHttpClient.executeMethod(MultithreadedHttpClient.java:174)

at org.geotools.http.commons.MultithreadedHttpClient.get(MultithreadedHttpClient.java:206)

at org.geotools.http.commons.MultithreadedHttpClient.get(MultithreadedHttpClient.java:186)

at org.geotools.data.ows.AbstractOpenWebService.internalIssueRequest(AbstractOpenWebService.java:455)

at org.geotools.ows.wms.WebMapServer.issueRequest(WebMapServer.java:454)

at org.geotools.ows.wms.map.WMSCoverageReader.getMap(WMSCoverageReader.java:338)

at org.geotools.ows.wms.map.WMSCoverageReader.read(WMSCoverageReader.java:321)

at org.geotools.renderer.lite.gridcoverage2d.GridCoverageReaderHelper.readSingleCoverage(GridCoverageReaderHelper.java:642)

at org.geotools.renderer.lite.gridcoverage2d.GridCoverageReaderHelper.readCoverage(GridCoverageReaderHelper.java:207)

at org.geotools.renderer.lite.gridcoverage2d.GridCoverageRenderer.renderImage(GridCoverageRenderer.java:705)

at org.geotools.renderer.lite.gridcoverage2d.GridCoverageRenderer.renderImage(GridCoverageRenderer.java:668)

at org.geoserver.wms.map.DirectRasterRenderer.readWithProjectionHandling(DirectRasterRenderer.java:720)

at org.geoserver.wms.map.DirectRasterRenderer.render(DirectRasterRenderer.java:245)

… 44 more


Geoserver-users mailing list

Please make sure you read the following two resources before posting to this list:

If you want to request a feature or an improvement, also see this: https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer

Geoserver-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-users

If you make the requests you see logged yourself (using a browser or cURL) … do they work?

Other options:

  • are you comfortable with wireshark or similar to watch the two programs talk to each other?
  • is some kind of firewall watching and closing down connections?

You indicate you are upgrading from 2.17.1 … we did provide the option of using a different HTTP client in the GeoTools Java library used for WMS access.
I am not sure how you configure that from GeoServer (there should be a choice between the built-in java URL and HTTP connections, and the Apache HTTP library).

···


Jody Garnett

I was about to suggest the same. The default is with the Apache HTTP library with a connection pool and persistent connections,
which is faster but less reliable. The alternative is to turn that off, creating a new HTTP connection for each request.

To do so, un-check the “HTTP connection pooling” option:

https://docs.geoserver.org/latest/en/user/data/cascaded/wms.html#adding-an-external-wms

Cheers
Andrea

···

GeoServer Professional Services from the experts!

Visit http://bit.ly/gs-services-us for more information.

Ing. Andrea Aime
@geowolf
Technical Lead

GeoSolutions Group
phone: +39 0584 962313

fax: +39 0584 1660272

mob: +39 339 8844549

https://www.geosolutionsgroup.com/

http://twitter.com/geosolutions_it


Con riferimento alla normativa sul trattamento dei dati personali (Reg. UE 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si precisa che ogni circostanza inerente alla presente email (il suo contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra operazione è illecita. Le sarei comunque grato se potesse darmene notizia.

This email is intended only for the person or entity to which it is addressed and may contain information that is privileged, confidential or otherwise protected from disclosure. We remind that - as provided by European Regulation 2016/679 “GDPR” - copying, dissemination or use of this e-mail or the information herein by anyone other than the intended recipient is prohibited. If you have received this email by mistake, please notify us immediately by telephone or e-mail

Thanks for the suggested workaround!

I have unchecked the “HTTP connection pooling” option as suggested below and do not get the “Connection reset” error any more.

I occasionally get a “read timeout” error, but not even close so many as before.

Is the performance affected when the “HTTP connection pooling” is unchecked?

Best Regards

Mattias Andrén

···

Från: Andrea Aime <andrea.aime@anonymised.com…>
Skickat: den 20 december 2022 10:37
Till: Jody Garnett jody.garnett@anonymised.com
Kopia: Mattias Andrén mattias.andren@anonymised.com; geoserver-users@lists.sourceforge.net
Ämne: Re: [Geoserver-users] GeoServer 2.21 - Cascaded WMS returns Connection reset

On Tue, Dec 20, 2022 at 9:54 AM Jody Garnett <jody.garnett@anonymised.com> wrote:

I am not sure how you configure that from GeoServer (there should be a choice between the built-in java URL and HTTP connections, and the Apache HTTP library).

I was about to suggest the same. The default is with the Apache HTTP library with a connection pool and persistent connections,

which is faster but less reliable. The alternative is to turn that off, creating a new HTTP connection for each request.

To do so, un-check the “HTTP connection pooling” option:

https://docs.geoserver.org/latest/en/user/data/cascaded/wms.html#adding-an-external-wms

Cheers

Andrea

==

GeoServer Professional Services from the experts!

Visit http://bit.ly/gs-services-us for more information.

Ing. Andrea Aime
@geowolf
Technical Lead

GeoSolutions Group
phone: +39 0584 962313

fax: +39 0584 1660272

mob: +39 339 8844549

https://www.geosolutionsgroup.com/

http://twitter.com/geosolutions_it


Con riferimento alla normativa sul trattamento dei dati personali (Reg. UE 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si precisa che ogni circostanza inerente alla presente email (il suo contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra operazione è illecita. Le sarei comunque grato se potesse darmene notizia.

This email is intended only for the person or entity to which it is addressed and may contain information that is privileged, confidential or otherwise protected from disclosure. We remind that - as provided by European Regulation 2016/679 “GDPR” - copying, dissemination or use of this e-mail or the information herein by anyone other than the intended recipient is prohibited. If you have received this email by mistake, please notify us immediately by telephone or e-mail