C# 从SQL Server 2012或SQL CLR C发送HTTP POST请求#

C# 从SQL Server 2012或SQL CLR C发送HTTP POST请求#,c#,.net,sql-server,asp.net-web-api,sqlclr,C#,.net,Sql Server,Asp.net Web Api,Sqlclr,从SQL Server 2012发送HTTP请求是否有公认的标准方式 我试图做的是使用远程服务器处理搜索查询,然后将结果插入SQL server 2012数据库。远程服务器提供了一个web api,该api接受POST请求和JSON内容 我有一个可行的解决方案,但是需要将多个程序集加载到SQL Server中。其中一些程序集不完全受支持(例如System.Net.Http.dll),会发出如下警告: 警告:Microsoft.NET Framework程序集“system.NET.http,ve

从SQL Server 2012发送HTTP请求是否有公认的标准方式

我试图做的是使用远程服务器处理搜索查询,然后将结果插入SQL server 2012数据库。远程服务器提供了一个web api,该api接受POST请求和JSON内容

我有一个可行的解决方案,但是需要将多个程序集加载到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
        }
    }
} 

就像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();
    }
}

您是否尝试过使用
WebClient
HttpWebRequest
而不是
HttpClient
——我不知道这些方法是否有效,但这两种方法都是在.NET中进行HTTP调用的旧方法。谢谢!是的,我在发布我的问题后尝试了这个方法,它可以在不加载额外程序集的情况下工作。虽然我很确定它以前不能正常工作。。不太清楚我改变了什么:o