Export Web Map Task Error: "Unable to connect to map server..."

10806
22
05-02-2012 05:53 AM
AR
by
New Contributor III
I receive this error anytime I try to print any base map from http://services.arcgisonline.com.

If I remove the base map from my code, it prints fine.

(From Firebug console:)
"Error executing tool.: Layer "layer0": Unable to connect to map server at http://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer. Failed to execute (Export Web Map). Failed to execute (Export Web Map Task)."

I get a gut-feeling it has something to do with my server's proxy, but I'm not sure.

Any thoughts?

Here is the proxy I'm using:

<%@page session="false"%>
<%@page import="java.net.*,java.io.*" %>
<%!
String[] serverUrls = {
  //"<url>[,<token>]"
  //For ex. (secured server): "http://myserver.mycompany.com/arcgis/rest/services,ayn2C2iPvqjeqWoXwV6rjmr43kyo23mhIPnXz2CEiMA6rVu0xR0St8gKsd0olv8a"
  //For ex. (non-secured server): "http://sampleserver1.arcgisonline.com/arcgis/rest/services"
  "http://sampleserver1.arcgisonline.com/arcgis/rest/services",
  "http://***/arcgis/rest/services, username=***",// username=***
  "http://server.arcgisonline.com/ArcGIS/rest/services",
  "http://***/ArcGIS/rest/services, username=***&password=***",
  "http://servicesbeta4.esri.com/arcgis/rest/services/",
  "http://sampleserver2.arcgisonline.com/arcgis/rest/services" 
};
%>
<%
try {
  String reqUrl = request.getQueryString();
  boolean allowed = false;
  String token = null;
  for(String surl : serverUrls) {
    String[] stokens = surl.split("\\s*,\\s*");
    if(reqUrl.toLowerCase().contains(stokens[0].toLowerCase())) {
      allowed = true;
      if(stokens.length >= 2 && stokens[1].length() > 0)
        token = stokens[1];
      break;
    }
  }
  if(!allowed) {
    response.setStatus(403);
    return;
  }
  if(token != null) {
    reqUrl = reqUrl + (reqUrl.indexOf("?") > -1 ? "&" : "?") + "token=" + token;
  }
  URL url = new URL(reqUrl);
 HttpURLConnection con = (HttpURLConnection)url.openConnection();
 con.setDoOutput(true);
 con.setRequestMethod(request.getMethod());
 if(request.getContentType() != null) {
   con.setRequestProperty("Content-Type", request.getContentType());
 }
  con.setRequestProperty("Referer", request.getHeader("Referer"));
 int clength = request.getContentLength();
 if(clength > 0) {
  con.setDoInput(true);
  InputStream istream = request.getInputStream();
  OutputStream os = con.getOutputStream();
  final int length = 5000;
   byte[] bytes = new byte[length];
   int bytesRead = 0;
   while ((bytesRead = istream.read(bytes, 0, length)) > 0) {
     os.write(bytes, 0, bytesRead);
   }
 }
  else {
    con.setRequestMethod("GET");
  }
 out.clear();
  out = pageContext.pushBody();
 OutputStream ostream = response.getOutputStream();
 response.setContentType(con.getContentType());
 InputStream in = con.getInputStream();
 final int length = 5000;
  byte[] bytes = new byte[length];
  int bytesRead = 0;
  while ((bytesRead = in.read(bytes, 0, length)) > 0) {
    ostream.write(bytes, 0, bytesRead);
  }
} catch(Exception e) {
 response.setStatus(500);
}
%>


22 Replies
HyrumErnstrom
New Contributor III
I was able to resolve the issue by logging in as agsadmin, the service account running the server then attempt to access arcgisonline via browser. Turns out, in our domain, service accounts aren't configured to be able to access the internet. All I had to do was open internet options and fill in proxy information.


Where was the "All I had to do was open internet options and fill in proxy information".

Thanks
0 Kudos
KyleDixon
Occasional Contributor
Internet Optiions.... Connections.... LAN Settings
0 Kudos
AndyGup
Esri Regular Contributor

AR,

Make sure that http://services.arcgisonline.com/ArcGIS/rest/services/‌ is explicitly added in the proxy configuration serverUrls list. I didn't see it listed in your code example. Once that is done then try running the print task again.

If it's still not working then please run thru the suggestions below to see if any of those help.

-Andy

0 Kudos