Sql server 调用API的SQL Server程序集

Sql server 调用API的SQL Server程序集,sql-server,vb.net,assemblies,smartystreets,Sql Server,Vb.net,Assemblies,Smartystreets,我遇到SQL Server程序集问题,这些程序集必须对外部服务SmartyStreets进行API调用。 我已经创建了一个引用SmartyStreets DLL的DLL。 这个新的DLL将获取地址字段,调用API并返回一个varchar(max) 在VS中测试时,我为输入地址创建了一个基本表单,它将调用DLL,然后用结果填充一个文本框。我的新DLL工作正常 我为SmartySteets DLL创建了程序集,设置如下: 从“C:\Windows\Microsoft.NET\Framework64\

我遇到SQL Server程序集问题,这些程序集必须对外部服务SmartyStreets进行API调用。 我已经创建了一个引用SmartyStreets DLL的DLL。 这个新的DLL将获取地址字段,调用API并返回一个varchar(max)

在VS中测试时,我为输入地址创建了一个基本表单,它将调用DLL,然后用结果填充一个文本框。我的新DLL工作正常

我为SmartySteets DLL创建了程序集,设置如下:

从“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SmartyStreets dotnet sdk.dll”创建程序集SmartyStreets,权限设置=不安全

我为我的DLL(引用SmartyStreets DLL)创建了程序集,如下所示:

从“C:\Program Files\Microsoft SQL Server\MSSQL14.HMARK\MSSQL\Binn\SmartyStreetsDLL.dll”创建程序集SmartyStreets\u API,权限设置=不安全

已创建该函数:

CREATE function CLR_AddressStandardization ( 
              @sAddress1 nvarchar(max)
            , @sAddress2 nvarchar(max)
            , @sCity nvarchar(max)
            , @sState nvarchar(max)
            , @sZIP nvarchar(max)
            , @sCountry nvarchar(max)) returns nvarchar(max) 
EXTERNAL NAME SmartyStreets_API.[SmartyStreetsDLL.SSDLL].StandardizeAddress
现在我调用新函数:
选择dbo.CLR\u地址标准化('18600 Malyn','','Fraser','MI','48026','')
它返回“错误:请求被中止:无法创建SSL/TLS安全通道。”

我相信有什么东西阻止了SmartyStreets DLL在外面打电话,但我不知道如何解决这个问题


有什么想法吗?

我的建议是:不要这样做,你总会有麻烦的

即使你现在运行它,你也会祈祷每一次windows更新都能正常运行,而且很多时候你必须重新安装(未更改的)程序集,因为某些.NET framework程序集已更改,SQL server检测到不一致并拒绝处理调用

编写一个设置“IsDirty”标志的触发器,在其上放置一个部分索引(其中IsDirty=1),并编写一个服务来检查是否存在脏记录,并为这些记录调用REST服务(或其他服务)


就像这样,它将通过所有的更新工作没有任何问题。唯一的问题是它不是即时的,而是稍微延迟。最大优势:如果服务关闭,您仍然可以添加/修改记录,这些记录将在以后进行验证。

首先想到的可能是web服务的另一端需要SSL通道,但您的客户端调用没有提供客户端证书,或者您提供的证书不可信。您可能必须配置出站调用以提供证书,考虑到解决方案的体系结构,这可能有点困难。您的程序集可以通过编程方式提供一个。这是一个加密握手问题。几乎每次我看到这一点,都意味着对我们的API进行https调用的应用程序/进程/操作系统试图利用比TLS 1.2旧的TLS版本。SmartyStreets不接受这些旧版本

有时只需要更新操作系统或.Net版本

更多信息请点击此处: