1 votos

Añadir capa WMS sin crossdomain.xml después de cargar el mapa en Flex

Tengo un problema con la carga de una capa WMS utilizando un widget hecho para Flex Viewer. El servidor que quiero usar no tiene un archivo crossdomain.xml. Voy a mostrar mucha información aquí así que lo siento por un poco de caos, pero necesito una pista de lo que está fallando.

Cuando añado esta capa al config.xml, funciona. El sitio hace una llamada a crossdomain.xml (resultados 404) pero la capa de alguna manera sigue funcionando. El código:

<layer url="http://mapy.geoportal.gov.pl/wss/service/pub/guest/G2_BDOT_BUD_2010/MapServer/WMSServer" 
    alpha="1" 
    visible="true" 
    type="wms" 
    label="BDOT" 
    visiblelayers="3,4,5,6" 
    version="1.3.0" 
    skipgetcapabilities="true" 
    imageFormat="png"/>

Sin embargo, si intento cargar esta capa utilizando un widget, da un error de seguridad.

[FaultEvent fault=[RPC Fault faultString="Security error accessing url" faultCode="Channel.Security.Error" faultDetail="Destination: DefaultHTTP"] messageId="62DC1CFD-5BD7-DD2E-44A2-9D0782B55D4C" type="fault" bubbles=false cancelable=true eventPhase=2]

Todo funciona cuando ejecuto una versión local (utilizando la depuración de Flex Viewer). Sin embargo, si construyo la aplicación y la pongo en el servidor, que es una llamada a crossdomain.xml, se produce el error de seguridad.

El widget funciona así:

1. call layer URL with GetCapabilities as XML
2. declare new WMSLayer object
3. set the WMSLayer object parameters using values form XML
4. add layer to map

La llamada separada para GetCapabilities es del código de mis predecesores. Intenté deshabilitarla y activar skipGetCapabilities="false" pero me da error:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at com.esri.viewer.components.toc.tocClasses::TocMapLayerItem/createChildren()
    at com.esri.viewer.components.toc.tocClasses::TocMapLayerItem/onLayerLoad()

en la línea 472 del archivo TocMapLayerItem.as, que es esta línea:

if (wmsVisibleLayers.source.indexOf(wmsLayerInfo.name) !== -1)

Traté de hacer un proxy, pero eso no funciona - cuando en un servidor de mi aplicación sólo trata de llamar al servidor con la capa WMS para crossdomain.xml, y eso es todo, no tratando de utilizar el proxy en absoluto.

Me alegro de cualquier ayuda o pista de lo que está pasando. Soy bastante nuevo en Flex Viewer, sé que el crossdomain.xml es necesario, pero no están dispuestos a configurarlo en el servidor, el cliente quiere que las capas de este servidor estén disponibles, y REALMENTE FUNCIONAN cuando simplemente las pongo en config.xml en lugar de impar tratando de añadir al mapa más tarde.


También mi aplicación me da un error justo después de cargar, no sé si esto tiene algo que ver con el problema del WMS pero aquí está:

TypeError: Error #1034: Type Coercion failed: cannot convert _index_mx_managers_SystemManager@d3a0999 to flash.display.Bitmap.
  at spark.primitives::BitmapImage/contentComplete()
  at spark.primitives::BitmapImage/http://www.adobe.com/2006/flex/mx/internal::loader_completeHandler()

0voto

James Tikalsky Puntos 771

No resolví el problema directamente, pero logré una solución con proxing manualmente:

  1. establecer la propiedad HTTPService useProxy a false
  2. hacer una función que compare la dirección del dominio con la dirección de la capa WMS de destino
  3. si los dominios son diferentes, añada la dirección del proxy al principio de la URL de la capa

Ahora la carga de capas WMS funciona incluso sin crossdomain.xml en el servidor de destino.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X