获取"找不到服务方法错误"在Bing地图中

时间:2018-02-08 09:04:22

标签: asp.net web-services bing-maps

我们正在使用地理编码服务来获取geocodeAddress(纬度/经度),但我们得到了"找不到服务方法"错误。以下是我的代码。

 public static double[] GeocodeAddress(string address, string virtualearthKey)
        {
            net.virtualearth.dev.GeocodeRequest geocodeRequest = new net.virtualearth.dev.GeocodeRequest
            {
                // Set the credentials using a valid Bing Maps key
                Credentials = new net.virtualearth.dev.Credentials { ApplicationId = virtualearthKey },
                // Set the full address query
                Query = address                
            };

            // Set the options to only return high confidence results 
            net.virtualearth.dev.ConfidenceFilter[] filters = new net.virtualearth.dev.ConfidenceFilter[1];
            filters[0] = new net.virtualearth.dev.ConfidenceFilter
            {
                MinimumConfidence = net.virtualearth.dev.Confidence.High
            };

            // Add the filters to the options
            net.virtualearth.dev.GeocodeOptions geocodeOptions = new net.virtualearth.dev.GeocodeOptions { Filters = filters };
            geocodeRequest.Options = geocodeOptions;

            // Make the geocode request
            net.virtualearth.dev.GeocodeService geocodeService = new net.virtualearth.dev.GeocodeService();
            net.virtualearth.dev.GeocodeResponse geocodeResponse = geocodeService.Geocode(geocodeRequest);

            if (geocodeResponse.Results.Length > 0)
            {
                return new[] { geocodeResponse.Results[0].Locations[0].Latitude, geocodeResponse.Results[0].Locations[0].Longitude };
            }

            return new double[] { };
        } // GeocodeAddress

密钥用于we.config中的bing map地理编码服务的URL

<add key="net.virtualearth.dev.GeocodeService" value="http://dev.virtualearth.net/webservices/v1/geocodeservice/GeocodeService.svc" />

1 个答案:

答案 0 :(得分:1)

看起来您正在尝试使用去年弃用并关闭的旧虚拟地球SOAP服务。这些被7或8年前的Bing Maps REST服务取代。由于您使用的是.NET,请查看Bing Maps .NET REST Toolkit。它使得在.NET中使用REST服务变得容易。还有一个NuGet套餐。您可以在此处找到详细信息:https://github.com/Microsoft/BingMapsRESTToolkit

将NuGet包添加到项目后,您可以按照以下方式进行地理编码:

//Create a request.
var request = new GeocodeRequest()
{
    Query = "New York, NY",
    IncludeIso2 = true,
    IncludeNeighborhood = true,
    MaxResults = 25,
    BingMapsKey = "YOUR_BING_MAPS_KEY"
};

//Execute the request.
var response = await request.Execute();

if(response != null && 
    response.ResourceSets != null && 
    response.ResourceSets.Length > 0 && 
    response.ResourceSets[0].Resources != null && 
    response.ResourceSets[0].Resources.Length > 0)
{
    var result = response.ResourceSets[0].Resources[0] as BingMapsRESTToolkit.Location;

    //Do something with the result.
}