2014-12-07 53 views
0

我正在嘗試爲我的學校使用Bing Map API並使用GeocodeAdress。我建立這個應用程序:http://msdn.microsoft.com/en-us/library/dd221354.aspx和問題是我每次都得到這個錯誤。Bing-Map-API我做錯了什麼?

它在第62行:此方法:GeocodeServiceClient geocodeService = new GeocodeServiceClient(); !

InvalidOperationException異常是未處理 「System.InvalidOperationException」類型的未處理的異常出現在System.ServiceModel.dll

其他信息:合同「GeocodeService.IGeocodeService」端點配置部分無法加載,因爲更多比找到該合同的一個端點配置。請按名稱指出首選的端點配置部分。

下面是代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

using BingMapsSample.GeocodeService; 
using BingMapsSample.SearchService; 
using BingMapsSample.ImageryService; 
using BingMapsSample.RouteService; 

namespace BingMapsSample 
{ 
/// <summary> 
/// Interaction logic for MainWindow.xaml 
/// </summary> 
public partial class MainWindow : Window 
{ 

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private String GeocodeAddress(string address) 
    { 
     string results = ""; 
     string key = "Validate Bing Map Education Code"; 
     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; 
    } 

    private string ReverseGeocodePoint(string locationString) 
    { 
     string results = ""; 
     string key = "Validate Bing Map Education Code"; 
     ReverseGeocodeRequest reverseGeocodeRequest = new ReverseGeocodeRequest(); 

     // Set the credentials using a valid Bing Maps key 
     reverseGeocodeRequest.Credentials = new GeocodeService.Credentials(); 
     reverseGeocodeRequest.Credentials.ApplicationId = key; 

     // Set the point to use to find a matching address 
     GeocodeService.Location point = new GeocodeService.Location(); 
     string[] digits = locationString.Split(','); 

     point.Latitude = double.Parse(digits[0].Trim()); 
     point.Longitude = double.Parse(digits[1].Trim()); 

     reverseGeocodeRequest.Location = point; 

     // Make the reverse geocode request 
     GeocodeServiceClient geocodeService = new GeocodeServiceClient(); 
     GeocodeResponse geocodeResponse = geocodeService.ReverseGeocode(reverseGeocodeRequest); 

     if (geocodeResponse.Results.Length > 0) 
      results = geocodeResponse.Results[0].DisplayName; 
     else 
      results = "No Results found"; 

     return results; 
    } 

    private string SearchKeywordLocation(string keywordLocation) 
    { 
     String results = ""; 
     String key = "Validate Bing Map Education Code"; 
     SearchRequest searchRequest = new SearchRequest(); 

     // Set the credentials using a valid Bing Maps key 
     searchRequest.Credentials = new SearchService.Credentials(); 
     searchRequest.Credentials.ApplicationId = key; 

     //Create the search query 
     StructuredSearchQuery ssQuery = new StructuredSearchQuery(); 
     string[] parts = keywordLocation.Split(';'); 
     ssQuery.Keyword = parts[0]; 
     ssQuery.Location = parts[1]; 
     searchRequest.StructuredQuery = ssQuery; 

     //Define options on the search 
     searchRequest.SearchOptions = new SearchOptions(); 
     searchRequest.SearchOptions.Filters = 
      new FilterExpression() 
      { 
       PropertyId = 3, 
       CompareOperator = CompareOperator.GreaterThanOrEquals, 
       FilterValue = 8.16 
      }; 

     //Make the search request 
     SearchServiceClient searchService = new SearchServiceClient(); 
     SearchResponse searchResponse = searchService.Search(searchRequest); 

     //Parse and format results 
     if (searchResponse.ResultSets[0].Results.Length > 0) 
     { 
      StringBuilder resultList = new StringBuilder(""); 
      for (int i = 0; i < searchResponse.ResultSets[0].Results.Length; i++) 
      { 
       resultList.Append(String.Format("{0}. {1}\n", i + 1, 
        searchResponse.ResultSets[0].Results[i].Name)); 
      } 

      results = resultList.ToString(); 
     } 
     else 
      results = "No results found"; 

     return results; 
    } 



    private void Geocode_Click(object sender, RoutedEventArgs e) 
    { 
     labelResults.Content = GeocodeAddress(textInput.Text); 
    } 

    private void ReverseGeocode_Click(object sender, RoutedEventArgs e) 
    { 
     labelResults.Content = ReverseGeocodePoint(textInput.Text); 
    } 

    private void Search_Click(object sender, RoutedEventArgs e) 
    { 
     labelResults.Content = SearchKeywordLocation(textInput.Text); 
    } 

} 
} 

我找到了解決辦法行62應該是:

var geocodeService = new GeocodeServiceClient("BasicHttpBinding_IGeocodeService"); 
+0

您是否將4個服務引用添加到了您的項目中? – Claies 2014-12-07 22:10:26

+0

是的,我確實添加了4個服務引用。 – StuiterSlurf 2014-12-08 07:49:55

回答

0

打開你的web.config文件或app.config文件。在那裏,您將看到該服務的基本和自定義綁定配置。刪除自定義綁定部分。清理和建立你的項目,它應該工作。

作爲一個側面說明。 Bing Maps SOAP服務非常陳舊,功能有限。他們在大約8年前被釋放。大約4年前發佈了一種更新的基於REST的服務。 REST速度更快,響應包更小,功能更多。您可以在此處瞭解有關Bing Maps REST服務的更多信息:http://msdn.microsoft.com/en-us/library/ff701713.aspx