SQL 2008 CLR和Bing Maps

| 我已经开发了一个小型C#应用程序,可以使用配置为服务引用的Bing地理编码服务对地址表进行地理编码。我已经加载了程序集,但是当我尝试通过存储过程调用它时,收到以下错误:
A .NET Framework error occurred during execution of user-defined routine or aggregate \"Geocoder\": 
System.InvalidOperationException: Could not find endpoint element with name \'BasicHttpBinding_IGeocodeService\' and contract \'BingMapsGeo.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 name could be found in the client element.
System.InvalidOperationException: 
   at System.ServiceModel.Description.ConfigLoader.LoadChannelBehaviors(ServiceEndpoint serviceEndpoint, String configurationName)
   at System.ServiceModel.ChannelFactory.InitializeEndpoint(String configurationName, EndpointAddress address)
   at System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName, EndpointAddress remoteAddress)
   at System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName)
   at System.ServiceModel.EndpointTrait`1.CreateSimplexFactory()
   at System.ServiceModel.EndpointTrait`1.CreateChannelFactory()
   at System.ServiceModel.ClientBase`1.CreateChannelFactoryRef(EndpointTrait`1 endpointTrait)
   at System.ServiceModel.ClientBase`1.InitializeChannelFactoryRef()
   at System.ServiceModel.ClientBase`1..ctor(String endpointConfigurationName)
   at Geocoder.BingMapsGeo.GeocodeServiceClient..ctor(String endpointConfigurationName)
   at Geocoder.UserDefinedFunctions.geocode(SqlString AddressLine, SqlString City, SqlString State, SqlString Zip)
我相当确定实际的C#程序集是正确的,但是我认为我在实际的Web服务方面缺少一些东西。 我一直在到处寻找解决方案,但是没有找到似乎可行的解决方案。 我正在Server 2008R2上运行带有最新补丁程序和.NET版本的SQL 2008R2。 任何想法都将受到欢迎。     
已邀请:
        可以从SQLCLR进行Web服务调用,但这始终是一个坏主意。 SQL Server资源非常宝贵,无法阻止它们等待Internet的响应。最终,除了(可疑的)冷静因素之外,使用SQLCLR进行此操作具有零优势。另外,不支持将WCF加载到SQLCLR中,请参阅SQL Server CLR托管环境中未经测试的.NET Framework程序集的支持策略。最后,SQLCLR程序集看不到任何.config配置节。通过将配置放置在sqlservr.exe.config中,有一个已知的解决方法,但也不受支持。 从客户端(您的应用程序)进行Web服务调用,然后更新数据库。这不仅受支持,而且实际上是正确的方法。     
        尽管我同意Remus的许多观点,但我不同意在应用程序层中只有一种“正确”的方式来调用Web服务。直接从SQL Server调用服务有其用途(尽管我承认,在生产环境中这很少是一个好主意)。 SQLCLR的好处之一是,如果将代码抽象为可重用的模块化单元,则应该能够轻松地在数据库和应用程序层次结构的其他基于.NET的层之间移动功能,并且具有相同的地理编码功能可以在客户端应用程序,Web层或数据库层中使用,只需要最少的记录量。 但是,如果您要沿SQLCLR路线行驶,则可能要考虑使用其他Bing Maps地理编码服务(特别是REST Locations API-http://msdn.microsoft.com/zh-cn/library/ ff701715.aspx),因为它是通过简单的REST URL访问的,因此可以避免从SQL Server到WCF服务的SOAP通信问题。如果要对大量数据进行地理编码,则可能还需要考虑Bing空间数据服务(http://msdn.microsoft.com/zh-cn/library/ff701734.aspx)提供的批量地理编码功能。 无论哪种方式,请记住,例如,作为对INSERT / UPDATE触发器的一部分插入表中的地址信息进行地理编码的Web服务在收到响应之前不会完成,并且将停止对该表的任何进一步更新。假设要花一秒钟的时间才能收到地址解析服务的响应-如果您有大量记录插入到地址表中,则可能很快就会发现服务器瘫痪了。您可以通过使用Service Broker异步管理对地址解析服务的请求,并在返回时使用经过地理处理的响应来更新表,从而在某种程度上缓解此问题。     
        好的,经过更多的挖掘,在Remus和Alastair的指导下,我意识到我走错了路,因为我的大部分目标只是对用户真正需要的Reporting Services报表中的单个地址进行地理编码深入研究如何通过本地TSQL做到这一点。我在SQLServerCentral上找到了David Rueter的精彩文章和示例代码,经过一些修改后,我能够生成一个不仅使用Bing而且还使用Google,Yahoo和Mapquest的UDF,并且根据响应的质量将在引擎以获得最佳答案。对于批处理编码,我正在处理一个将数据加载到临时表中并进行地理编码的存储过程,最后更新主表。 该解决方案似乎对我有用,当然我确信CLR是可行的方法。还有其他我应该考虑的想法吗? 感谢到目前为止的所有帮助!     

要回复问题请先登录注册