No meu aplicativo C #, estou tentando acessar um serviço de recursos que está hospedado no arcgis.com. O serviço do recurso é compartilhado apenas com um grupo ou organização e NÃO é público. Como posso acessar este serviço no meu código de cliente. Aqui está o código do meu cliente que lança uma exceção dizendo que o Token de autenticação é necessário. Eu tenho o token, mas não sei como usá-lo para ser autenticado para usar o serviço. Esse mesmo código funciona bem para serviços compartilhados como 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);
Respostas:
Seu layerUrl é semelhante em: http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServer
Basta adicionar o token para Url: http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServer?token=gGIYjUwXvaO75l1X7LHsgOo2Yueoh1jTGRvrKm7K9ZBE-0TY-EA_Ml7vJtllQK9P2nngX5ciedKgHkjLOEgRSKYR8QhDJMDpWQ09PhTWubNACuFsNIQ3fdlbS6tsPO0h
fonte
http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServer
sendo enviados pela rede, mesmo depois de anexar o token ao layerUrl."http://services2.arcgis.com/js0B5yfJ0ZQG/arcgis/rest/services/TxsUltural/FeatureServer
e também tenho o token gerado. vamos supor token éabc112asdfkljznxc123123lkjkj23klj
tão url completa é como"http://services2.arcgis.com/js0B5yfJ0ZQG/arcgis/rest/services/TxsUltural/FeatureServer?token=abc112asdfkljznxc123123lkdfkj23klj"
E eu também tentei com sublayers individuais comourl:"http://services2.arcgis.com/js0BC5yf1J0Z4Q5G/arcgis/rest/services/texas_cultural/FeatureServer/1?token=abc112asdfkljznxc123123lkjadfkj23klj"
, mas sem sorteToken Authentication required
exceção quando eu usá-lo no código que é publicado na pergunta original :)Consulte o link abaixo, parece que você tem algum problema de proxy. Para acessar serviços protegidos, você precisa ter nome de usuário e senha e apenas escrever um código no qual o token é gerado no tempo de execução e anexá-lo adequadamente
http://resources.arcgis.com/en/help/arcobjects-net/componenthelp/index.html#//0048000000sv000000
fonte
generateToken
consulta. Só não consigo recuperar os serviços seguros que publiquei.Esta postagem de exemplo do fórum da GeoNet é baseada em javascript, mas basicamente realiza o que você deseja que aconteça.
No entanto, no caso da API 'ArcObjects for .Net' da ESRI (que podemos dizer que você está usando com base nos namespaces), você deve implementar o método IArcGISSingleSignon.GetToken. O método desse objeto conectará um usuário ao ArcGIS Online (AGOL) e retornará um token. A fábrica da área de trabalho e as definições de objeto da classe de recurso não requerem o token, mas a conexão deve ocorrer antes de acessar os serviços de recurso AGOL seguros.
Por fim, apenas como um ponto de API, o IWorkspaceFactory é obsoleto e o IWorkspaceFactory2 agora é o objeto de interface preferido - as assinaturas não foram alteradas, mas as implementações de back-end.
Poste para confirmar que o suplemento C # se conecta corretamente ao AGOL depois de implementar os tokens de conexão única usando o método GetToken.
fonte