Wydanie CORS ArcGIS 10.1 IIS (Udostępnianie zasobów między źródłami)


11

Mam ArcGIS 10.1 zainstalowany z adapterem sieciowym dla IIS. Dodałem plik konfiguracyjny do katalogu głównego IIS7, aby włączyć udostępnianie zasobów między źródłami pochodzenia (CORS) zgodnie z stroną. Wrzuciłem serwer ArcGIS z włączonymi corsami do listy domyślnych serwerów cors jak na tej stronie:

esri.config.defaults.io.corsEnabledServers.push("vmagstenone")). 

Jednak gdy moja aplikacja JavaScript hostowana na vmagsten wysyła żądanie do serwera GIS (vmagstenone), pojawia się błąd

"Origin http://vmagsten is not allowed by Access-Control-Allow-Origin.". 

Edycja: A warstwa obiektów nie ładuje się. Próbowałem również załadować warstwę dynamiczną i to też kończy się niepowodzeniem z tym samym błędem _557 (patrz obraz)

Edycja: Nie powinienem widzieć tego błędu, ponieważ powyższe kroki powinny oznaczać, że serwer obsługuje cross origin. To stwierdzenie esri, że ten błąd można zignorować, nie ma zastosowania w tym przypadku, ponieważ ten serwer powinien obsługiwać cors. Oznacza to, że pierwszy błąd serwera ESRI można zignorować.

wprowadź opis zdjęcia tutaj!

Edycja: oto przykładowa odpowiedź z zapytania na tej warstwie pokazująca, że ​​odpowiedź ma kontrolę dostępu-Allow-Origin

wprowadź opis zdjęcia tutaj!


3
Możesz zdefiniować CORS, aby było jasne, że mówimy o współdzieleniu zasobów pochodzących z różnych źródeł, a nie o stale działającej stacji referencyjnej , która jest używana do GPS.
Kirk Kuykendall

2
Czy masz pewność, że Twój IIS zwraca wymagane nagłówki dla CORS?
Devdatta Tengshe,

@DevdattaTengshe Zredagowałem powyższy post
David Wilton

Odpowiedzi:


4

Wspomniałeś, że pojawia się błąd, ale czy usługa faktycznie nie ładuje się?

Pytam, gdy zauważyłem ten post na forach Esri, który stwierdza:

Ten błąd można bezpiecznie zignorować. Istnieją przypadki, w których API nie wyśle ​​żądania do // rest / info i są następujące: Przeglądarka nie obsługuje CORS Serwer jest już wymieniony w pliku esri.config.defaults.io.corsEnabledServers esri.config.defaults.io .corsDetection ma wartość false JSON jest używany zamiast JSONP w następujących przypadkach: Pobrany zasób znajduje się w tej samej domenie co aplikacja Pobrany zasób znajduje się na serwerze obsługującym CORS

Zakładam, że dzieje się tak również w innych konsolach przeglądarki?

Jeśli nie, możesz rzucić gdzieś (lub wysłać mi e-mailem) dziennik Fiddlera lub plik .HAR i odpowiednio zmodyfikować tę odpowiedź.


Przepraszam, że powinienem wspomnieć, że to widziałem. Usługa nie ładuje się. Wyślę błąd z przeglądarki Firefox. Nie zawiedzie w IE
David Wilton,

Myślę, że prawdopodobnie masz rację, że pierwsze dwa błędy należy zignorować, ponieważ ESRI twierdzi, że są one oczekiwane. Problemem wydaje się jednak błąd _557 pochodzący z frameworka. Otrzymuję ten sam błąd w wersji 3.3 i 3.4
David Wilton

1
Próbowałem również użyć warstwy dynamicznej zamiast warstwy funkcji i ma to ten sam problem. Jeśli witryna jest hostowana na tym samym serwerze co dane, nie ma błędów. Za pomocą chrome.exe - disdable-web-security (nie wymuszaj zasad cors) żądania są w porządku. To sprawia, że ​​uważam, że jest to problem z coorsami i prośbami.
David Wilton,

2

Podczas gdy odpowiedź nie zawiera Access-Control-Allow-Origin: *nagłówka, zawiera również X-Frame-Options: SAMEORIGINi X-XSS-Protection: 1; mode=blocknagłówki. Są to nagłówki prefiksów X, które są niestandardowe , więc nie jestem w 100% pewien, czy twoja przeglądarka honoruje je nad nagłówkiem zezwalającym.

Możesz użyć narzędzia takiego jak Fiddler do dodawania i usuwania nagłówków z żądań przeglądarki; może to pomóc w śledzeniu tego, co się dzieje.


2

Oto, co działało dla mnie w IIS 8.0. Może być inaczej w innych wersjach IIS.

Usuń plik customHeadersz katalogu głównego witryny web.configlub usuń web.configgo całkowicie.

Następnie przejdź do ApplicationHost.configw IIS Configuration Manager dla arcgisaplikacji i dodaj Access-Control-Allow-Originnazwę i *wartość do customHeaders.

Edytor konfiguracji IIS 8.0

CustomHeaders



1

To, co w końcu zadziałało, to dodanie do strony ROOT, a NIE aplikacji dla adaptera sieciowego . Czy ma sens? Nie do mnie. Ale to zadziałało dla mnie.

EDYCJA: Powinien przejść do pliku proxy DotNet o nazwie Web.config.

<configuration>
  <...rest of file...>
    <system.webServer>
      <httpProtocol>
       <customHeaders>
         <add name="Access-Control-Allow-Origin" value="*" />
       </customHeaders>
      </httpProtocol>
    </system.webServer>
  </...rest of file...>
</configuration>

wprowadź opis zdjęcia tutaj


TO była odpowiedź, która zadziałała dla mnie ... Edytuję twoją odpowiedź, aby wyjaśnić, co należy zmienić.
randomblink
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.