Место общения программистов C#
Anonymous
OpenAPI со службой IAsyncEnumerable RESTFul
Сообщение
Anonymous » 24 сен 2024, 06:10
Может ли кто-нибудь предоставить инструкции или, еще лучше, пример того, как OpenAPI будет сначала документировать, а затем генерировать клиентский код Javascript и C# для следующей службы RESTful: -
Код: Выделить всё
[HttpGet]
public async IAsyncEnumerable yieldLastName(string inName, [EnumeratorCancellation]CancellationToken cancellationToken)
{
if (string.IsNullOrWhiteSpace(inName))
{
Console.WriteLine("Illeagal Parameter. inName is mandatory.");
yield break;
}
// alter database [AdventureWorks2022] set ALLOW_SNAPSHOT_ISOLATION on;
TransactionOptions txnOpts = new TransactionOptions() { IsolationLevel = IsolationLevel.Snapshot };
List namesSelect = new List();
SqlParameter searchName = new SqlParameter("LastName", System.Data.SqlDbType.Char);
searchName.Value = inName + "%";
var sql = @"
select
LastName,
count(*) as hitRate
from
Person.Person P
where
LastName like @LastName
group by
LastName
";
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew, txnOpts, TransactionScopeAsyncFlowOption.Enabled))
{
using (SqlConnection cxn = new SqlConnection(connStr))
{
SqlCommand cmd = new SqlCommand(sql, cxn);
cmd.Parameters.Add(searchName);
cmd.CommandTimeout = 120000;
SqlDataReader reader = null!;
Boolean hasRows = false;
try
{
await cxn.OpenAsync(cancellationToken);
reader = await cmd.ExecuteReaderAsync(cancellationToken);
hasRows = await reader.ReadAsync(cancellationToken);
}
catch (TaskCanceledException ex) when (ex.CancellationToken == cancellationToken) { }
while (!cancellationToken.IsCancellationRequested && hasRows)
{
string lastName = "";
int hitRate = 0;
if (!reader.IsDBNull(0))
{
lastName = reader.GetString(0);
}
hitRate = reader.GetInt32(1);
yield return new
{
LastName = Uri.EscapeDataString(lastName),
HitRate = hitRate
};
try
{
hasRows = await reader.ReadAsync(cancellationToken);
}
catch (TaskCanceledException ex) when (ex.CancellationToken == cancellationToken) { }
// await Task.Delay(100); // Slow down the Demo
}
}
scope.Complete();
}
}
Полный рабочий пример можно найти здесь. Вам необходимо загрузить копию базы данных AdventureWorks и использовать VisualStudio для ее запуска.
Подробнее здесь:
https://stackoverflow.com/questions/790 ... ul-service
1727147425
Anonymous
Может ли кто-нибудь предоставить инструкции или, еще лучше, пример того, как OpenAPI будет сначала документировать, а затем генерировать клиентский код Javascript и C# для следующей службы RESTful: - [code] [HttpGet] public async IAsyncEnumerable yieldLastName(string inName, [EnumeratorCancellation]CancellationToken cancellationToken) { if (string.IsNullOrWhiteSpace(inName)) { Console.WriteLine("Illeagal Parameter. inName is mandatory."); yield break; } // alter database [AdventureWorks2022] set ALLOW_SNAPSHOT_ISOLATION on; TransactionOptions txnOpts = new TransactionOptions() { IsolationLevel = IsolationLevel.Snapshot }; List namesSelect = new List(); SqlParameter searchName = new SqlParameter("LastName", System.Data.SqlDbType.Char); searchName.Value = inName + "%"; var sql = @" select LastName, count(*) as hitRate from Person.Person P where LastName like @LastName group by LastName "; using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew, txnOpts, TransactionScopeAsyncFlowOption.Enabled)) { using (SqlConnection cxn = new SqlConnection(connStr)) { SqlCommand cmd = new SqlCommand(sql, cxn); cmd.Parameters.Add(searchName); cmd.CommandTimeout = 120000; SqlDataReader reader = null!; Boolean hasRows = false; try { await cxn.OpenAsync(cancellationToken); reader = await cmd.ExecuteReaderAsync(cancellationToken); hasRows = await reader.ReadAsync(cancellationToken); } catch (TaskCanceledException ex) when (ex.CancellationToken == cancellationToken) { } while (!cancellationToken.IsCancellationRequested && hasRows) { string lastName = ""; int hitRate = 0; if (!reader.IsDBNull(0)) { lastName = reader.GetString(0); } hitRate = reader.GetInt32(1); yield return new { LastName = Uri.EscapeDataString(lastName), HitRate = hitRate }; try { hasRows = await reader.ReadAsync(cancellationToken); } catch (TaskCanceledException ex) when (ex.CancellationToken == cancellationToken) { } // await Task.Delay(100); // Slow down the Demo } } scope.Complete(); } } [/code] Полный рабочий пример можно найти здесь. Вам необходимо загрузить копию базы данных AdventureWorks и использовать VisualStudio для ее запуска. Подробнее здесь: [url]https://stackoverflow.com/questions/79010801/openapi-with-iasyncenumerable-restful-service[/url]