Не может клонировать подвижный (hg) репозиторий через http

Я разработал решение, и я думаю, что проблема возникла из-за моего глубокого непонимания основных служб ASP.NET. Я объясню на случай, если у кого-то возникнет такая же проблема (или, возможно, подтвердит или опровергнет мой ответ).

Когда вы добавляете класс / интерфейс сервиса в ваш IServiceCollection, этот сервис становится доступным для других сервисов через интерфейс. Вы просто включаете интерфейс в конструктор другого сервиса, который вы хотите вызвать в своем конструкторе, сохраняете его, и затем вы можете вызывать интерфейс (что я понимаю, это проявление внедрения зависимости). Примерно так:

    private readonly InterfaceRCResponseQueue _rcResponseQueue;
    private readonly ILogger _logger;

    public UdpListenerBackgroundService(
        InterfaceRCResponseQueue rcResponseQueue,
        ILogger logger
        )
    {
        _rcResponseQueue = rcResponseQueue;
        _logger = logger;
    }

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

Подвох:

Одиночная служба не может зависеть от области обслуживания или временной службы. Предположительно, потому что это зависает в области обслуживания или переходного периода. И наоборот, все в порядке.

https://blog.markvincze.com/two-gotchas-with-scoped-and-singleton-dependencies-in-asp-net-core/

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

Для этого я поместил свой класс UdpClient в класс, который наследуется от Microsoft.Extensions.Hosting.BackgroundService и, следовательно, создается и уничтожается в процессе работы приложения. Я также создал одноэлементный класс, который содержит очередь.

Когда мой класс UdpClient в моем классе BackgroundService получает дейтаграмму UDP, я вызываю метод в одноэлементном классе, который ставит его в очередь в одноэлементном классе.

Тогда класс с областью действия, одноэлементный или переходный класс может зависеть от одноэлементного класса и искать данные в этой очереди (очереди) на досуге. Вы просто не можете сделать обратное (сделать так, чтобы синглтон зависел от ограниченного или транзитивного сервиса).

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

5
задан Tom Marthenal 10 February 2012 в 03:11
поделиться

3 ответа

Argh ... Нужно быть осторожным с конфигурацией .htaccess. В моем случае мне нужно было добавить 'hgwebdir.cgi' к пути к клону ... Спасибо за ответы, хотя!

SSH кажется логичным, но почему-то я не смог использовать его с пользователем, отличным от локального:

hg клон ssh: //MY_REMOTE_USER @ MYREPO remote: abort: Здесь нет репозитория Mercurial (.hg не найден)!

0
ответ дан 18 December 2019 в 12:01
поделиться

ОБНОВЛЕНИЕ:

Похоже, вы путаетесь между хранилищем и именем хоста

Если вы запускаете "hg serve", "hg clone http: // USER @ HOST : 8000 "где хостом может быть IP-адрес вашей машины или имя хоста (введите" hostname "в linux или попробуйте" ping localhost "). Вы можете изменить порт по умолчанию с 8000, передав --port #### в hg serve.

Если вы хотите сделать это через ssh, "hg clone ssh: // USER @ HOST // PATH / TO / ВАШ / СКЛАД». Предположим, вы создали репозиторий в своем домашнем каталоге с именем MYREPO, а затем сделали бы следующее: "hg clone ssh: // USER @ HOST/ ~ / MYREPO "

Вы можете клонировать свое репо только через http - это то, что служит репо по http. Mercurial предоставляет вам встроенный http-сервер. Запустите" hg serve ", находясь внутри вашего репо, затем попытайтесь клонировать его. из другого места (или другой командной оболочки). Если вам нужен локальный клон, вам не нужно использовать http ("hg clone").

Также попробуйте "hg help clone" и "hg help serve" для деталей.

10
ответ дан 18 December 2019 в 12:01
поделиться

besszero прав, но почему бы вам не клонировать с помощью SSH, если вы все равно собираетесь использовать имя пользователя и пароль?

hg clone ssh: // machine_ip // your / repo / location your_repo

Также безопаснее, если вы не хотите открывать другой порт для http-сервера mercurial и вам не нужны функции hgweb, трафик также зашифрован. Единственным недостатком является то, что вы должны войти в систему, чтобы оформить заказ, но HTTP не работает для откат изменений, по крайней мере, по моему опыту.

2
ответ дан 18 December 2019 в 12:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: