如何从代码背后获取Bing Map会话密钥

本文关键字:Bing Map 会话密钥 获取 背后 代码 | 更新日期: 2023-09-27 18:26:28

为了减少我的web表单asp.net项目中的可计费事务,我决定测试它。

我在会话密钥的msdn上遇到了以下示例。

Map.CredentialsProvider.GetCredentials(
    Function(c)
        Dim sessionKey As String = c.ApplicationId
        'Generate a request URL for the Bing Maps REST services.
        'Use the session key in the request as the Bing Maps key
       Return 0
    End Function)

我的代码示例

private String GeocodeAddress(string address)
{    string results = "";
string key = "Bing Maps key";
GeocodeRequest geocodeRequest = new GeocodeRequest();
// Set the credentials using a valid Bing Maps key
geocodeRequest.Credentials = new GeocodeService.Credentials();
geocodeRequest.Credentials.ApplicationId = key;
// Set the full address query
geocodeRequest.Query = address;
// Set the options to only return high confidence results 
ConfidenceFilter[] filters = new ConfidenceFilter[1];
filters[0] = new ConfidenceFilter();
filters[0].MinimumConfidence = GeocodeService.Confidence.High;
// Add the filters to the options
GeocodeOptions geocodeOptions = new GeocodeOptions();
geocodeOptions.Filters = filters;
geocodeRequest.Options = geocodeOptions;
// Make the geocode request
GeocodeServiceClient geocodeService = new GeocodeServiceClient();
GeocodeResponse geocodeResponse = geocodeService.Geocode(geocodeRequest);
if (geocodeResponse.Results.Length > 0)
    results = String.Format("Latitude: {0}'nLongitude: {1}", 
      geocodeResponse.Results[0].Locations[0].Latitude, 
      geocodeResponse.Results[0].Locations[0].Longitude);
else
    results = "No Results Found";
return results;

}

调试后,我看不出b/w(应用程序id/会话密钥)和Bing-Api密钥有任何区别。如何在上面的例子中获得sessionkey?

如何从代码背后获取Bing Map会话密钥

会话密钥只能与交互式地图在同一页面上使用。不允许在页面之间传递会话密钥。假设您有一个AJAX按钮或正在服务器上处理一些代码并将其返回到与地图相同的页面的东西,那么这就可以了。

第一段代码看起来像是您正在尝试在.NET中生成会话密钥。只有当您使用Silverlight或WPF时,这才有可能。我假设您没有在服务器上使用Bing Maps WPF控件,因为这确实违反了使用条款。如果您正在使用Silverlight,则无需向服务器端传递密钥。

因此,假设您从Bing Maps v7控件生成一个JavaScript键,并将其传递给服务器上的AJAX按钮处理程序。如果是这样的话,那也没关系。

在您的代码中,看起来您使用的是非常旧的遗留SOAP服务,这是不推荐的。事实上,我在四五年前就不再推荐它们了。该文档几年前就被离线了。您应该使用Bing Maps REST服务,它更快、更准确,并且具有更多功能。您可以在这里找到有关如何在.NET中使用它们的文档:http://msdn.microsoft.com/en-us/library/jj819168.aspx

此外,这里还有一些关于使用REST服务的提示:http://blogs.bing.com/maps/2013/02/14/bing-maps-rest-service-tips-tricks/

ApplicationId和会话密钥是一回事。SOAP服务太旧了,以前有一个不同的名称。

你不会马上在报告中看到任何差异。报告在所有服务器/数据中心之间同步可能需要长达一周的时间,因为这是一项具有大量数据的低优先级工作。

如果你的应用程序有不错的流量,你可能会收到比可计费交易多得多的不可计费交易,这可能会导致你的账户被标记、调查,甚至可能被阻止。

您应该做的是提前对地址进行地理编码并存储坐标。这就是大多数应用程序处理此类场景的方式。您唯一需要动态地理编码的时间是,如果您有一个用于用户输入的搜索框,则所有其他内容都应该提前进行地理编码以提高性能。