W mojej aplikacji C # próbuję uzyskać dostęp do usługi Feature, która jest hostowana na arcgis.com. Usługa funkcji jest udostępniana tylko grupie lub organizacji i NIE jest publiczna. Jak mogę uzyskać dostęp do tej usługi w kodzie mojego klienta? Oto mój kod klienta, który zgłasza wyjątek informujący, że wymagany jest token uwierzytelnienia. Mam token, ale nie wiem, jak użyć tego tokena do uwierzytelnienia w celu korzystania z usługi. Ten sam kod działa poprawnie w przypadku usług udostępnianych jako PUBLIC.
IPropertySet sipPS = new PropertySet();
sipPS.SetProperty("DATABASE", layerUrl);
IWorkspaceFactory sipWSF = (IWorkspaceFactory)new ESRI.ArcGIS.Carto.FeatureServiceWorkspaceFactory();
IWorkspace sipWS = sipWSF.Open(sipPS, 0);
IFeatureWorkspace sipFWS = (IFeatureWorkspace)sipWS;
IGroupLayer grpLayer = new GroupLayerClass();
grpLayer.Name = Constants.ArcGISOnlineGroupLayerName;
IFeatureClass sipFC = sipFWS.OpenFeatureClass("0");
IFeatureLayer fl = new FeatureLayerClass();
fl.Name = featureLayerName;
fl.FeatureClass = sipFC;
grpLayer.Add(fl as ILayer);
Odpowiedzi:
Twój layerUrl jest podobny pod adresem : http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServer
Wystarczy dodać token do URL: http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServer?token=gGIYjUwXvaO75l1X7LHsgOo2Yueoh1jTGRvrKm7K9ZBE-0TY-EA_Ml7vJtllQK9P2nngX5ciedKgHkjLOEgRSKYR8QhDJMDpWQ09PhTWubNACuFsNIQ3fdlbS6tsPO0h
źródło
http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServer
są wysyłane tylko przez sieć, nawet po dodaniu tokena za pomocą warstwyUrl."http://services2.arcgis.com/js0B5yfJ0ZQG/arcgis/rest/services/TxsUltural/FeatureServer
i mam również wygenerowany token. załóżmy, że token jestabc112asdfkljznxc123123lkjkj23klj
tak kompletny, że adres URL jest podobny."http://services2.arcgis.com/js0B5yfJ0ZQG/arcgis/rest/services/TxsUltural/FeatureServer?token=abc112asdfkljznxc123123lkdfkj23klj"
Próbowałem też z pojedynczymi podwarstwami,url:"http://services2.arcgis.com/js0BC5yf1J0Z4Q5G/arcgis/rest/services/texas_cultural/FeatureServer/1?token=abc112asdfkljznxc123123lkjadfkj23klj"
ale bez powodzeniaToken Authentication required
wyjątek, gdy używam go w kodzie opublikowanym w pierwotnym pytaniu :)Zapoznaj się z poniższym linkiem, wygląda na to, że masz problem z serwerem proxy. Aby uzyskać dostęp do zabezpieczonych usług, musisz mieć nazwę użytkownika i hasło, po prostu napisz kod, w którym token jest generowany w czasie wykonywania, i po prostu musisz go poprawnie dołączyć
http://resources.arcgis.com/en/help/arcobjects-net/componenthelp/index.html#//0048000000sv000000
źródło
generateToken
zapytania. Po prostu nie mogę odzyskać bezpiecznych usług, które opublikowałem.Ten przykładowy post z forum GeoNet jest oparty na javascript, ale zasadniczo realizuje to, co chcesz zrobić.
Jednak w przypadku API ESRI „ArcObjects for .Net” (które możemy powiedzieć, że używasz na podstawie przestrzeni nazw) powinieneś zaimplementować metodę IArcGISSingleSignon.GetToken. Metoda tego obiektu zaloguje użytkownika do ArcGIS Online (AGOL) i zwróci token. Fabryka obszaru roboczego i definicje obiektów klasy obiektów nie wymagają tokena, ale logowanie musi nastąpić przed uzyskaniem dostępu do zabezpieczonych usług funkcji AGOL.
Wreszcie, podobnie jak punkt API, IWorkspaceFactory jest przestarzały, a IWorkspaceFactory2 jest teraz preferowanym obiektem interfejsu. - sygnatury nie uległy zmianie, ale implementacje backendu uległy zmianie.
Opublikuj, aby potwierdzić, że Twój dodatek C # poprawnie łączy się z AGOL po wdrożeniu tokenów jednokrotnego logowania przy użyciu metody GetToken.
źródło