2017-02-10 18 views
1

Я пытаюсь повторить то, что я нашел здесь, чтобы использовать Бинга геокод API: https://sqlmd.wordpress.com/2012/03/27/using-the-ssis-scripting-task-to-geocode-addresses/Bing Geocode API, SSIS, C# Script

Когда я бегу, что у меня есть, я получаю эту ошибку:

Error: 0xFFFFFFFF at Get Lat Long Bing, Error:: Could not find default endpoint element that references contract 'bing.geocode.IGeocodeService' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element.

Сценарий, который я использую, - C#.

Public Sub Main() 
    If Dts.Variables.Contains("Address") And Dts.Variables.Contains("Lat") And Dts.Variables.Contains("Long") Then 
     Try 
      ' Set a Bing Maps key before making a request 

      Dim key As String = "Bing Key goes here" 

      Dim geocodeRequest As New bing.geocode.GeocodeRequest 

      Dim SearchAddress As String 
      SearchAddress = Dts.Variables("Address").Value.ToString 
      Dts.Events.FireInformation(0, "Address:", SearchAddress, "", 0, True) 

      ' Set the credentials using a valid Bing Maps Key 

      geocodeRequest.Credentials = New bing.geocode.Credentials() 
      geocodeRequest.Credentials.ApplicationId = key 

      ' Set the full address query 

      geocodeRequest.Query = SearchAddress 

      ' Set the options to only return high confidence results 
      Dim filters As bing.geocode.ConfidenceFilter() = New bing.geocode.ConfidenceFilter(0) {} 
      filters(0) = New bing.geocode.ConfidenceFilter() 
      filters(0).MinimumConfidence = bing.geocode.Confidence.High 

      Dim geocodeOptions As New bing.geocode.GeocodeOptions() 
      geocodeOptions.Filters = filters 

      geocodeRequest.Options = geocodeOptions 

      ' Make the geocode request 
      Dim geocodeService As New bing.geocode.GeocodeServiceClient 
      Dim geocodeResponse As bing.geocode.GeocodeResponse = geocodeService.Geocode(geocodeRequest) 


      If geocodeResponse.Results.Length > 0 AndAlso geocodeResponse.Results(0).Locations.Length > 0 Then 
       Dts.Events.FireInformation(0, "Lat:", geocodeResponse.Results(0).Locations(0).Latitude.ToString(), "", 0, False) 
       Dts.Variables("Lat").Value = geocodeResponse.Results(0).Locations(0).Latitude 
       Dts.Events.FireInformation(0, "Long:", geocodeResponse.Results(0).Locations(0).Longitude.ToString(), "", 0, True) 
       Dts.Variables("Long").Value = geocodeResponse.Results(0).Locations(0).Longitude 
      End If 

     Catch ex As Exception 
      Dts.Events.FireError(-1, "Error:", ex.Message, "", 0) 
      Dts.TaskResult = ScriptResults.Success 
     End Try 
    Else 
     Dts.Events.FireError(-1, "Error:", "Missing vairable in Task Component Definition.", "", 0) 
    End If 

End Sub 


Enum ScriptResults 
    Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success 
    Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure 
End Enum 

End Class

И это моя app.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.diagnostics> 
     <sources> 
      <!-- This section defines the logging configuration for   My.Application.Log --> 
     <source name="DefaultSource" switchName="DefaultSwitch"> 
      <listeners> 
       <add name="FileLog"/> 
       <!-- Uncomment the below section to write to the Application Event Log --> 
       <!--<add name="EventLog"/>--> 
      </listeners> 
     </source> 
    </sources> 
    <switches> 
     <add name="DefaultSwitch" value="Information" /> 
    </switches> 
    <sharedListeners> 
     <add name="FileLog" 
      type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" 
      initializeData="FileLogWriter"/> 
     <!-- Uncomment the below section and replace APPLICATION_NAME with the name of your application to write to the Application Event Log --> 
     <!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> --> 
    </sharedListeners> 
</system.diagnostics> 
<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="basicHttpBinding_IGeocodeService" /> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://dev.virtualearth.net/webservices/v1/geocodeservice/GeocodeService.svc" 
      binding="basicHttpBinding_IGeocodeService" bindingConfiguration="basicHttpBinding_IGeocodeService" 
      contract="basicHttpBinding_IGeocodeService" name="basicHttpBinding_IGeocodeService" /> 
    </client> 
</system.serviceModel> 

ответ

0

Я подозреваю, что вы должны проверить, если ваш конфигурационный файл настроен правильно

<configuration> 
    ... 
    <client> 
     <endpoint address="http://localhost:9999/" 
      binding="yoursetting" bindingConfiguration="yoursetting" 
      contract="yoursetting" name="yoursetting"> 
     </endpoint> 
    </client> 
    ... 
</configuration> 

В качестве альтернативы может потребоваться восстановление конфигурации. В этом случае вы должны удалить пользовательские привязки из конфигурации и перестроить решение.

+0

<связывании имя = "BasicHttpBinding_IGeocodeService" /> <адрес конечной точки = "HTTP : //dev.virtualearth.net/webservices/v1/geocodeservice/GeocodeService.svc» связывание = "BasicHttpBinding_IGeocodeService" bindingConfiguration = "" контракт = "" название = "BasicHttpBinding_IGeocodeService basicHttpBinding_IGeocodeService BasicHttpBinding_IGeocodeService"/> Joey

+0

@Joey Я бы предложил вам добавить этот код в свой вопрос, чтобы получить дополнительную помощь. – Svek

+0

Попробуйте удалить пользовательские привязки из конфигурации и перестроить проект. – Svek

0

Похоже, вы используете старые устаревшие сервисы SOAP Bing Maps. Они приближаются к концу жизни и будут отключены в конце июня. Вместо этого используйте службы REST RING Maps, которые быстрее и имеют больше возможностей. Команда Bing Maps создала инструментарий с открытым исходным кодом для использования служб REST RING Maps в .NET. На самом деле это проще, чем использование служб SOAP: https://github.com/Microsoft/BingMapsRESTToolkit/

При этом, если у вас есть много данных для геокодирования в вашей базе данных на регулярной основе, вы можете использовать службу пакетного геокодирования, которая находится в Bing Maps. Его немного больше работы по настройке, но будет намного быстрее для больших наборов данных, будет использовать меньшую пропускную способность. В качестве дополнительного бонуса, если вы лицензируете Bing Maps, первые 1M-пакетные геокодированные адреса в год являются бесплатными клиентами. Вы можете найти документацию об этой услуге здесь: https://msdn.microsoft.com/en-us/library/ff701733.aspx

+0

Есть ли ссылка, которая уже выполнена? Я не знаю, как работает 1-я ссылка, которую вы мне прислали. Я не кодер, поэтому многое из этого не имеет смысла. – Joey

+0

На этой странице есть ссылка на документацию для этого инструментария. Документация довольно проста: https://github.com/Microsoft/BingMapsRESTToolkit/wiki/Getting-Started – rbrundritt