【问题标题】:How to get Bing Map Session Key from code behind如何从后面的代码中获取 Bing Map 会话密钥
【发布时间】:2014-10-14 23:02:44
【问题描述】:

为了减少我的 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;

}

调试后,我看不出黑白(应用程序 ID/会话密钥)和 Bing Api 密钥有任何区别。如何在上面的示例中获取 sessionkey?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    在您的代码中,您似乎在使用不推荐的非常旧的遗留 SOAP 服务。事实上,我在大约 4 或 5 年前就停止推荐它们了。该文档在几年前已下线。您应该使用更快、更准确且具有更多功能的 Bing 地图 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 服务太老了,它曾经有不同的名称。

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

    如果您的应用程序具有良好的流量,那么您最终可能会收到比可计费交易更多的非计费交易,这可能会导致您的帐户被标记和调查并可能被阻止。

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

    【讨论】:

    • 我正在尝试在我的 asp.net Web 表单应用程序上实现 Bing 地图。我试图弄清楚如何从页面后面的代码中获取会话密钥。我可以使用 java 脚本,但从后面的代码中我不知道这是否可能。我有一个通用的工程师列表,其中包含包括 Lat 和 Lng 值的地址。在使用一个会话键在中继器控件上显示它们(仅显示距离值)之前,是否可以遍历列表并计算从给定 lat 和 lng 的行进距离。
    • 如果您有一个已知用户(或轻度已知用户),那么会话不会在成本方面发生任何变化。使用已知用户许可,您需要为有权访问该应用的用户数量付费,而不是为创建的交易数量付费。
    • 这很有趣,向我们出售许可证的人提到,无论您购买多少个用户许可证,1 或 300 个,交易限制都适用于所有这些,而不适用于个人用户。例如,如果每日限制是 25k,那么它不是 300 x 25k,而是 25k 是一个完整的限制,对我来说没有任何意义。
    • 对于少数用户,少于5000,已知用户账户的最大交易次数保持不变。在 5000 个用户之后,它会增加。请注意,每日限额是一天内可以完成的最多交易,而不是您每天可以完成的最多交易。还有一个年度限制,即上限。这个想法是为了防止某人在一天内使用价值数年的交易。
    • 对不起,我很困惑,会话密钥对 Light Known 用户重要吗?我不是在谈论成本,我正在考虑减少可计费交易。如果我们购买轻用户许可证,那么使用会话密钥仍然是一个好主意,因为仍然存在每日或每年的交易限制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    相关资源
    最近更新 更多