den*_*nis 8 .net c# sql-server sqlclr asp.net-web-api
是否有一种普遍接受的标准方式从SQL Server 2012发送HTTP请求?
我想要做的是使用远程服务器处理搜索查询,然后将结果插回到SQL Server 2012数据库.远程服务器提供了一个web api,它接受带有JSON内容的POST请求.
我有一个有效的解决方案,但需要将多个程序集加载到SQL Server中.其中一些程序集不完全受支持(例如System.Net.Http.dll),发出如下警告:
警告:Microsoft .NET Framework程序集"system.net.http,version = 4.0.0.0,culture = neutral,publickeytoken = b03f5f7f11d50a3a,processorarchitecture = msil." 您正在注册未在SQL Server托管环境中进行全面测试,并且不受支持.将来,如果升级或维护此程序集或.NET Framework,则CLR集成例程可能会停止工作.有关更多详细信息,请参阅SQL Server联机丛书.
我想知道是否有更好/更安全的方式不需要加载所有这些组件?
我的存储过程的CLR代码:
[Microsoft.SqlServer.Server.SqlProcedure]
public static void SendSearchRequestProcedure (string query, string table)
{
    RunAsync(query,table).Wait();
}
static async Task RunAsync(string query, string table)
{
    using (var client = new HttpClient())
    {
        HttpResponseMessage response;
        client.BaseAddress = new Uri("http://localhost:9000/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        var search = new Search() { Query = query, Table = table };
        response = await client.PostAsJsonAsync("api/search/", search);
        if (!response.IsSuccessStatusCode)
        {
            // handle error
        }
    }
} 
den*_*nis 13
就像Joe建议使用HttpWebRequest而不是HttpClient使用不受支持的程序集而不是作品:
[Microsoft.SqlServer.Server.SqlProcedure]
public static void SendRequest (string query, string table)
{
    string address = "http://localhost:9000/api/search";
    HttpWebRequest request = (HttpWebRequest) WebRequest.Create(address);
    request.ContentType = "application/json; charset=utf-8";
    request.Method = "POST";
    using (var streamWriter = new StreamWriter(request.GetRequestStream()))
    {
        string json = "{\"Query\":\""+query+"\",\"Table\":\""+table+"\"}";
        streamWriter.Write(json);
        streamWriter.Flush();
    }
    var httpResponse = (HttpWebResponse)request.GetResponse();
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
    {
        var result = streamReader.ReadToEnd();
    }
}
| 归档时间: | 
 | 
| 查看次数: | 8398 次 | 
| 最近记录: |