gpt4 book ai didi

signalr - 引用项目中的 map 中心

转载 作者:行者123 更新时间:2023-12-03 20:15:04 25 4
gpt4 key购买 nike

http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-signalr-20-self-host

就我而言,我的集线器位于从启动自托管应用程序的项目代码中引用的项目中。

在线connection.Start().Wait();我得到一个异常(exception)。以下是该行抛出的异常序列:

  • 指定的注册表项不存在 System.IO.IOException
  • 无法解析“MessageHub”集线器 无效操作异常
  • 远程服务器返回错误:(500) 内部服务器错误 网络异常

  • 引用项目中消息中心类的签名为 public class MessageHub : Hub .

    更新:为了测试理论,我将集线器类从引用的项目移动到我的测试项目中并更新了命名空间。有效。所以我认为这里的理论是合理的......默认集线器分辨率在引用的项目或单独的命名空间中找不到集线器。

    如何说服 MapHubs 在引用的项目中找到测试中心?

    最佳答案

    我想我已经找到了答案。

    在对源代码进行一些挖掘之后,SignalR 似乎使用以下方法来指定 IAssemblyLocator 来定位集线器。

        internal static RouteBase MapHubs(this RouteCollection routes, string name, string path, HubConfiguration configuration, Action<IAppBuilder> build)
    {
    var locator = new Lazy<IAssemblyLocator>(() => new BuildManagerAssemblyLocator());
    configuration.Resolver.Register(typeof(IAssemblyLocator), () => locator.Value);

    InitializeProtectedData(configuration);

    return routes.MapOwinPath(name, path, map =>
    {
    build(map);
    map.MapHubs(String.Empty, configuration);
    });
    }

    public class BuildManagerAssemblyLocator : DefaultAssemblyLocator
    {
    public override IList<Assembly> GetAssemblies()
    {
    return BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToList();
    }
    }

    public class DefaultAssemblyLocator : IAssemblyLocator
    {
    public virtual IList<Assembly> GetAssemblies()
    {
    return AppDomain.CurrentDomain.GetAssemblies();
    }
    }

    这让我尝试简单地将我的外部程序集添加到当前域,因为虽然它被引用了,但它没有被加载。

    所以在调用 WebApp.Start 之前,我调用了以下行。
        static void Main(string[] args)
    {
    string url = "http://localhost:8080";

    // Add this line
    AppDomain.CurrentDomain.Load(typeof(Core.Chat).Assembly.FullName);

    using (WebApp.Start<Startup>(url))
    {
    Console.WriteLine("Server running on {0}", url);
    Console.ReadLine();
    }
    }

    Core.Chat 只是我正在使用的 Hub 类。
    然后加载引用程序集中定义的集线器。

    可能有更直接的方法来解决这个问题,但我在文档中找不到任何内容。

    希望这可以帮助。

    关于signalr - 引用项目中的 map 中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16779057/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com