Хорошо, если я правильно понимаю ваши настройки, это два разных веб-приложения. Это будет означать, что экземпляры концентратора SignalR будут полностью уникальными в каждом запущенном приложении. Это означает, что в приложении портала будут размещаться «настоящие» экземпляры-концентраторы, к которым подключаются ваши реальные клиенты, но затем в вашем бот-приложении вы пытаетесь использовать контекст концентратора, и это будут их собственные экземпляры, которые имеют к ним не привязаны клиенты.
Самый простой вариант - разместить бота в самом приложении портала. Это обеспечит доступ к точным экземплярам концентратора в качестве портала. Недостатком этого подхода является то, что вы перегружаете свое приложение множеством обязанностей (например, теперь вы запускаете бота в своем портальном приложении).
Следующим вариантом будет предоставление дополнительного «бэкэнда» REST API в виде контроллера в приложении портала, которое специально разработано для того, чтобы позволить боту запускать события, которые вам нужны, и которые могут быть защищены таким образом, чтобы что только клиенты, такие как бот, могут вызывать его (например, с помощью общего ключа).
Третий вариант - сделать вашего бота клиентом реального приложения SignalR, которое размещается на самом портале. Это позволит вам использовать единый протокол и механизм связи (против введения контроллера), и, опять же, бот будет просто аутентифицировать себя специально, чтобы он мог инициировать события в концентраторах, которые обычные пользователи не могут.