Доброго времени суток. Имеется некий внешний WCF сервис располагающийся по адресу:
https://cunaexchengetest.azurewebsites.net/Service1.svc
С помощью Microsoft WCF Web Service Reference Provider я добавил его ссылку в проект ASP.NET Core.
Суть вопроса в том, что при запуске ASP.NET Core сервера необходимо запустить функционал, который раз в 6 секунд будет вызывать определенный метод вышеуказанного WCF сервиса.
Логику придумал такую:
1.Создал внутренний сервис
--Итерфейс
public interface ICunaLoader
{
void LoadData();
}
--Его реализация
public class CunaLoader:ICunaLoader
{
Service1Client service = new Service1Client();//объект WCF сервиса
TimerCallback tm;
public CunaLoader()
{
// устанавливаем метод обратного вызова
tm = new TimerCallback(Load);
}
public void LoadData()
{
// создаем таймер
Timer timer = new Timer(tm, service, 0, 6000);
}
private static void Load(object obj)
{
var service1 = obj as Service1Client;
service1.LoadTradeLinesAsync();
}
}
2.В классу Startup.cs
добавил этот внутренний сервис в метод ConfigureServices
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddTransient<ICunaLoader, CunaLoader>();
}
Вопрос!!! Как мне теперь добавить этот внутренний сервис (вернее запуск его метода LoadData()
) в конвейер обработки запросов ASP.NET Core сервера?
Спасибо @tym32167 - показал в какую сторону двигаться. Значит оставил только инстанс без всяких интерфейсов:
public class CunaLoader
{
private static CunaLoader instance;
private Timer Timer { get; set;}
private TimerCallback TmCallbck { get; set; }
private Service1Client CunaService { get; set; }
private static object syncRoot = new Object();
protected CunaLoader(Service1Client cunaServise)
{
CunaService = cunaServise;
TmCallbck = new TimerCallback(Load);
Timer = new Timer(TmCallbck, CunaService, 0, 6000);
}
public static CunaLoader GetCunaLoader(Service1Client cunaServise)
{
if (instance == null)
{
lock(syncRoot)
{
if (instance == null) instance = new CunaDbLoader(cunaServise);
}
}
return instance;
}
private static void Load(object obj)
{
(obj as Service1Client).LoadTradeLinesAsync();
}
}
Далее в конструкторе класса Startup()
сервера запустил синглтон.
public class Startup
{
Service1Client cunaServise = new Service1Client();
public Startup()
{
CunaLoader.GetCunaLoader(cunaServise);
}
}
Все заработало как и предпологалось с частотой в 6 секунд.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
На форме необходимо разместить небольшой хелп с описанием параметров и примерамиКакой есть контрол, чтобы я мог поместить описание параметров...
Имеется ComboBox, в котором хранится список доступных портовНа данный момент для обновления используется отдельная кнопка
Существует форма для ввода логина и пароляКак можно войти в систему, не вводя логин и пароль (передавая их другим образом)?