MVC Web API 2のサービスを使用するWPFアプリケーションがあります。HTTPClientを使用してPostAsyncやGetAsyncなどの非同期メソッドを呼び出すRestClientラッパーを作成しました。私のPOSTメソッドラッパーは、次のようになります。HTTPClientでC#CLRストアドプロシージャを使用してWeb API 2メソッドを呼び出します。
using (var client = new HttpClient(new HttpClientHandler()
{ AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip }))
{
var content = new FormUrlEncodedContent(postObject);
SetupClient(client, methodName, apiUrl, postObject, headerContent);
if (apiKey != null && appId != null)
await SetAuthorizationHeader(client, methodName, apiUrl, appId, apiKey, content).ConfigureAwait(false);
using (HttpResponseMessage response = Task.Run(() => client.PostAsync(apiUrl, content)).Result)
{
response.EnsureSuccessStatusCode();
using (HttpContent httpContent = response.Content)
{
if (response.IsSuccessStatusCode)
{
result = response.Content.ReadAsAsync<T>().Result;
}
}
}
}
うまくいきます。今は、SQL Serverデータベースプロジェクトを作成してC#CLRストアドプロシージャを使用してAPI呼び出しの一部を呼び出そうとしています。私は、エラーを構築取得しています。この手順のDLLを生成しようとすると
[Microsoft.SqlServer.Server.SqlProcedure]
public static void SQLRestClient(SqlString weburl, SqlString postBody, SqlString appIdString, SqlString apiKeyString, SecureString baseAddress, out SqlString returnval)
{
string apiUrl = Convert.ToString(weburl);
string baseAddressString = Convert.ToString(baseAddress);
string result = string.Empty;
var appId = ConvertToSecureString(Convert.ToString(appIdString));
var apiKey = ConvertToSecureString(Convert.ToString(apiKeyString));
try
{
string methodName = HttpMethod.Post.Method.ToUpper();
using (var client = new HttpClient(new HttpClientHandler()
{
AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip
}))
{
var content = new FormUrlEncodedContent(postObject);
SetupClient(client, methodName, apiUrl, postObject, headerContent);
if (apiKey != null && appId != null)
await SetAuthorizationHeader(client, methodName, apiUrl, appId, apiKey, content).ConfigureAwait(false);
using (HttpResponseMessage response = Task.Run(() => client.PostAsync(apiUrl, content)).Result)
{
response.EnsureSuccessStatusCode();
using (HttpContent httpContent = response.Content)
{
if (response.IsSuccessStatusCode)
{
result = response.Content.ReadAsStringAsync();
}
}
}
}
}
catch (Exception ex)
{
SqlContext.Pipe.Send(ex.Message.ToString());
}
returnval = result;
}
:
C#CLRストアドプロシージャは次のようになります。 その私が、私は解決策を見つけた
Sending HTTP POST request from SQL Server 2012 or SQL CLR C#
このスレッドを経たようコンパイラがSystem.Net.Http.dll
ようなアセンブリ参照を認識していないので、 HttpClientの代わりにHttpWebRequestを使用します。私は自分のアプリケーション全体でHttpClientを使用しているので、HttpWebRequestに切り替える必要はありません。
誰でも他の方法を提案して、HttpClientを使用してCLRストアドプロシージャDLLを生成できるようにすることはできますか。どんな援助も感謝し、前もって感謝します。