Является ли использование статического объекта для HttpClient / RestClient безопасным для всех функций Azure? - PullRequest
0 голосов
/ 06 марта 2019

Ситуация: у меня есть несколько лазурных функций, которые выходят и получают данные с разных веб-сайтов.Домен веб-сайтов меняется, и каждая функция выполняет несколько http-вызовов.Очень важно, что когда функция для веб-сайта A не получает данные с веб-сайта B. Я читал, что лучше всего использовать ваш httpclient / restclient и т. Д.
Ссылка: Рекомендации HttpClient в функциях Azure

Но я хочу совет, как это сделать правильно.

public class WebsiteCaller
{
private static RestClient httpClient = new RestSharp.RestClient();

public WebsiteCaller(string domainName)
{
    httpClient = new RestClient(domainName);

}
public object GetWebData1(string parameters)
{
    //use httpClient with parameters and return data

}
public object GetWebData2(string parameters)
{
    //use httpClient with parameters and return data
}

}

public class Manager
{
public void GetDataAndDoStuff()
{
    var webConnection = new WebsiteCaller("clientnameDomain.com");
    var result1 = webConnection.GetWebData1("name=something");
    //Do something with result1
    var result2 = webConnection.GetWebData2("name=result1Info");
    //Continue making more http calls
}

}

Если эта функция запускается из триггера очереди, где потенциально сотни могут произойти за минуту.Должен ли я беспокоиться о Job1 из очереди, используя RestClient из Job2.Есть ли лучший способ справиться с этим?
Я использую как прямой HttpClient для некоторых разделов моего приложения, так и RestClient для других частей (новых и старых).Вот почему я упоминаю оба в этом вопросе.Это все еще в функциях Azure 1.x .net стандарт

1 Ответ

2 голосов
/ 06 марта 2019

Функции Azure используют модель выполнения, в которой может быть несколько одновременных выполнений нескольких функций в одном процессе. Если в этом процессе определена статическая переменная, на которую ссылаются несколько функций, то эта статическая переменная будет повторно использоваться при выполнении этих функций.

Для таких типов, как HttpClient, такое поведение часто желательно. Как правило, вы захотите повторно использовать один и тот же экземпляр HttpClient для нескольких выполнений функции, поскольку это позволяет повторно использовать базовое соединение, а HttpClient является потокобезопасным. Я не знаком с RestClient, вам нужно будет провести собственное исследование того, безопасен ли он для потоков.

Если вам нужно настроить клиентские объекты с конкретными настройками для каждого домена, с которым вы разговариваете, то вам, вероятно, потребуется создать статический словарь клиентов, содержащий по одному клиенту на домен.

...