在windows azure中,我们托管了两个asp.net webapi项目作为app服务.我们需要在这里启用分布式事务.我们在一个api内启动交易.然后在该事务范围内,我们获取该事务的传播令牌,并在另一个api调用期间将其作为头发送.代码就像波纹管.
[HttpGet]
[Route("api/Test/Transaction/Commit")]
public async Task<string> Commit()
{
using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions
{
IsolationLevel = IsolationLevel.ReadCommitted
},
TransactionScopeAsyncFlowOption.Enabled))
{
// cross app domain call
using (var client = new HttpClient())
{
using (var request = new HttpRequestMessage(HttpMethod.Get, ConfigurationManager.AppSettings["IdentityServerUri"] + "api/Test/Transaction/NoCommit"))
{
// forward transaction token
request.AddTransactionPropagationToken();
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
}
}
this.Repository.Insert(new Currency { Ccy = "x", IsoCode = "XIS", Name = "XYZ", CurrencyId = 9 });
await this.Repository.SaveChangesAsync();
scope.Complete();
return …Run Code Online (Sandbox Code Playgroud) msdtc transactions transactionscope distributed-transactions azure
I am using create-react-app to create a react application. When I executes npm test -- --coverage the test never exists. npm test actually runs react-scripts test. Any Idea?
continuous-integration frontend unit-testing node.js reactjs
我们正在创建一个应用程序并使用 firebase 身份验证。我们的组织中有一个现有的 oauth2 提供程序。是否可以在 firebase 中添加此自定义提供程序?所以我们将在我们的身份提供者中添加一个新客户端并配置 firebase 以便它可以接受来自它的令牌。
我已经使用asp.net webapi编写了一个api,并将其作为Appservice部署为Azure。我的控制器的名称为TestController,我的操作方法如下。
[Route("Test/Get")]
public string Get()
{
Thread.Sleep(10000);
return "value";
}
Run Code Online (Sandbox Code Playgroud)
因此,对于每个请求,它都应等待10秒钟,然后返回字符串“ value”。我还编写了另一个端点,以查看线程池中用于执行请求的线程数。这个动作就像是在吼叫。
[Route("Test/ThreadInfo")]
public ThreadPoolInfo Get()
{
int availableWorker, availableIO;
int maxWorker, maxIO;
ThreadPool.GetAvailableThreads(out availableWorker, out availableIO);
ThreadPool.GetMaxThreads(out maxWorker, out maxIO);
return new ThreadPoolInfo
{
AvailableWorkerThreads = availableWorker,
MaxWorkerThreads = maxWorker,
OccupiedThreads = maxWorker - availableWorker
};
}
Run Code Online (Sandbox Code Playgroud)
现在,当我们同时向Test / Get端点发出29个get调用时,几乎需要11秒钟才能成功获得所有请求。因此,服务器在11个线程中同时执行所有请求。要查看线程状态,请在调用Test / Get之后立即调用Test / ThreadInfo返回(无需等待){{“ AvailableWorkerThreads”:8161,“ MaxWorkerThreads”:8191,“ OccupiedThreads”:30}
似乎有29个线程正在执行测试/获取请求,有1个线程正在执行Test / ThreadInfo请求。
当我拨打60次Test / Get的get呼叫时,需要大约36秒钟才能成功。调用Test / ThreadInfo(花费一些时间)会返回{“” AvailableWorkerThreads“:8161,” MaxWorkerThreads“:8191,” OccupiedThreads“:30}
如果我们增加请求数量,则OccupiedThreads的值将增加。就像处理1000个请求一样,它需要2分22秒,而OccupiedThreads的值为129。
尽管在WorkerThread中有很多线程可用,但似乎在30个并发调用后请求和排队。逐渐地,它增加了用于并发执行的线程,但这还不够(对于1000个请求,为129个)。
由于我们的服务有很多IO调用(其中一些是外部api调用,有些是数据库查询),因此延迟也很高。由于我们使用所有IO调用异步方式,因此服务器可以同时处理大量请求,但是当处理器进行实际工作时,我们需要更多的并发性。我们正在将S2服务计划用于一个实例。增加实例将增加并发性,但是我们需要从单个实例中获得更多的并发性。
在阅读了IIS上的一些博客和文档后,我们看到有一个设置minFreeThreads。如果线程池中的可用线程数下降,则此设置的值IIS开始将请求排队。appservice中有这样的东西吗?而且是否真的有可能从azure应用服务中获得更多的并发性,或者我们在那里缺少一些配置?
如何在天蓝色的密钥库中上载或存储公共密钥(.cer)文件。从keyvault面板,当我尝试上载适用于.pfx文件的任何.cer文件时,它给出了错误。
azure ×2
c# ×1
firebase ×1
frontend ×1
iis ×1
msdtc ×1
node.js ×1
oauth-2.0 ×1
reactjs ×1
threadpool ×1
transactions ×1
unit-testing ×1