如何从代码后面获取Bing Map Session Key

时间:2014-10-14 23:02:44

标签: c# asp.net map bing-maps bing-api

为了减少我的网络表单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?

1 个答案:

答案 0 :(得分:2)

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

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

因此,假设您从Bing Maps v7控件生成JavaScript中的密钥,并将其传递给服务器上的AJAX按钮处理程序。如果是这种情况,那就没关系。

在您的代码中,您似乎正在使用不推荐的旧版旧SOAP服务。事实上,我在大约4或5年前就不再推荐它们了。该文档几年前已脱机。您应该使用更快,更准确且具有更多功能的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服务太旧了,过去常常有不同的名称。

您不会立即看到报告中的任何差异。报告可能需要一周的时间才能在所有服务器/数据中心之间同步,因为它是具有大量数据的低优先级作业。

如果您的应用程序拥有不错的流量,您可能最终会获得比可结算交易更多的非可结算交易,这可能会导致您的帐户被标记和调查,并可能被阻止。

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