如何访问arcgis.com上托管的功能服务,该服务仅与特定组或组织共享


9

在我的C#应用​​程序中,我试图访问arcgis.com上托管的功能服务。要素服务仅与组或组织共享,并且不公开。如何在客户代码中访问此服务。这是我的客户端代码,引发异常,要求提供身份验证令牌。我确实有令牌,但是不知道如何使用该令牌进行身份验证才能使用该服务。对于作为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);

您是否要为应用程序设置用户登录名或应用程序登录名?另外,您的应用程序是否使用基于OAuth 2的API?讨论链接:resources.arcgis.com/en/help/arcgis-rest-api/index.html
#//…

我没有使用基于OAuth 2的api进行身份验证。我只是通过传递用户的登录凭据使用GenerateToken查询来生成令牌。登录后,我在Arcgis.com上发布了一项服务,并与一个小组共享了该服务。由于该服务未作为公共共享,因此当我本人或共享服务的组尝试使用此服务时,会出现“需要身份验证令牌”错误。我确实有令牌,但是我不知道如何使用该令牌来成功使用安全服务。
2014年

这是从stackoverflow.com/questions/26429713/…的直接副本交叉发布的,但是在两个站点上都添加了赏金
PolyGeo

@PolyGeo我在两个地方发布了相同问题的副本,因为我需要紧急回复。那是违反某些规则还是什么?
2014年

已在meta.stackexchange.com/questions/64068/上讨论了有关交叉发布到多个SO / SE站点的策略。 但是,通过在两个站点上对同一问题进行悬赏,我的理解是它们无法在任一网站(meta.stackexchange.com/questions/14591/…)。但是,通过使两个站点的潜在答复者都知道彼此的问答,可能会导致协同增效和更快的解决方案。
PolyGeo

Answers:


3

我确实尝试将令牌与layerUrl附加在一起,但是没有运气。我使用了Fiddler应用程序来查看API或网络正在生成哪些URL,但是http://services1.arcgis.com/cFi1BRRsYB2fYqCl/arcgis/rest/services/NameService/FeatureServer即使在将令牌附加有layerUrl之后,我也看不到仅通过网络发送的URL。
2014年

在AGOL上,在我的内容下单击“在ArcGIS for Desktop中打开”,然后开始下载文件item.pitem。在此文件中,您可以找到要素图层的URL。在网址中添加“?token = <yourtoken>&f = json”,然后在浏览器中将其打开。告诉我发生了什么事。
lele3p 2014年

我确实有该层的Url,"http://services2.arcgis.com/js0B5yfJ0ZQG/arcgis/rest/services/TxsUltural/FeatureServer并且我也生成了令牌。让我们假设令牌是abc112asdfkljznxc123123lkjkj23klj如此完整的URL,就像"http://services2.arcgis.com/js0B5yfJ0ZQG/arcgis/rest/services/TxsUltural/FeatureServer?token=abc112asdfkljznxc123123lkdfkj23klj"我还尝试了单个子层一样, url:"http://services2.arcgis.com/js0BC5yf1J0Z4Q5G/arcgis/rest/services/texas_cultural/FeatureServer/1?token=abc112asdfkljznxc123123lkjadfkj23klj"但没有运气
WAQ 2014年

我可以使用上面的url和令牌在浏览器中查看该层。只是Token Authentication required当我在原始问题中发布的代码中使用它时,我正在获取异常:)
WAQ 2014年

黑暗中的总刺痛-PropertySet可能具有未记录的TOKEN属性吗?
MC5 2014年

1

请参考下面的链接,似乎是您确实有一些代理问题。要访问受保护的服务,您需要具有用户名和密码,并且只需编写一个代码即可在运行时生成令牌,并且只需正确地附加它即可

http://resources.arcgis.com/zh-CN/help/arcobjects-net/componenthelp/index.html#//0048000000sv000000


我确实有用户名,密码,并已使用generateToken查询生成了令牌。只是无法检索我已发布的安全服务。
2014年

1

GeoNet论坛上的此示例帖子是基于javascript的,但它基本上完成了您想要发生的事情。

但是,对于ESRI的“ .Net的ArcObjects” API(我们可以根据命名空间告诉我们使用的API),您应该实现IArcGISSingleSignon.GetToken方法。该对象的方法将使用户登录ArcGIS Online(AGOL)并返回令牌。工作区工厂和要素类对象定义不需要令牌,但是必须在访问安全的AGOL要素服务之前进行登录。

最后,就API而言,IWorkspaceFactory已过时,而IWorkspaceFactory2现在是首选的接口对象。-签名没有改变,但后端实现改变了。

一旦使用GetToken方法实现单点登录令牌,请发布以确认您的C#加载项正确连接到AGOL。


我确实尝试了“ IArcGISSingleSignOn.GetToken”,并在将我的凭据输入到出现的登录对话框后得到了生成的令牌。之后执行与问题中相同的代码,但仍出现相同的异常“需要身份验证令牌”。
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.