- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试从 .net Web API Controller 操作中调用客户端方法。
我可以这样做吗?
我能找到的唯一一篇贴近我想要做的文章是这篇文章:
SignalR + posting a message to a Hub via an action method
其中使用 GlobalHost.ConnectionManager.GetHubContext 从 asp.net MVC Controller 操作中发送一条消息。
当我在我的 Web API 操作中尝试这样做时,没有抛出任何错误,但从不在客户端调用方法“methodInJavascript”。
Public ActionResult MyControllerMethod()
{
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.All.methodInJavascript("hello world");
// or
context.Clients.Group("groupname").methodInJavascript("hello world");
}
当我在该操作中设置一个断点时,我看到正在到达并执行代码。但是在 JavaScript 客户端没有任何反应。
为什么? Web API 的内幕如此不同以致于它不起作用吗?有没有其他人尝试过并取得成功?
当我从我的集线器“内部”调用“methodInJavascript”时,它运行良好。从 .net Web API Controller 操作中调用时将不起作用。
更新:
在研究了这个问题后,我没有解决办法。我只能假设像这样的例子中缺少一些东西 Server to client messages not going through with SignalR in ASP.NET MVC 4还有这个calling SignalR hub from WebAPI controller issues就像可能有一个额外的配置步骤来启用从 HubContext 或其他东西调用。我最初在此处发布的代码与那些示例中出现的代码类似,但未被证明有任何缺陷。任何人都可以看到代码中的缺陷吗?从 html 调用有效。我在我的应用程序中广泛使用它,从未遇到过问题。我从未在 API Controller 工作中看到来自 HubContext 的调用。没有错误。只是在客户端没有结果。
已解决(某种程度上):
上面的代码确实可以发布时。虽然不能通过本地主机在 Visual Studio 开发环境中工作。没有错误,但客户端没有结果。将代码按原样发布到 Web 上的真实服务器确实有效。我从没想过会有什么不同,所以我从未尝试过。认为如果它在本地不起作用,那么它就无法发布。它现在正在运行,但我想知道为什么它不能在开发环境中通过 localhost 运行。无法使用断点等进行本地测试。
我有一种感觉,就是那个 signalr 虚拟目录。在本地运行与发布时有些不同。不确定是什么,但我看到很多帖子,例如 http://www.bitwisejourneys.com/signalr-hosting-in-iis-a-nasty-gotcha/ .现在阅读,看看是否有办法让它在本地和发布时都有效。
最佳答案
几天前我遇到了同样的问题。我花了 2 天时间找到解决方案并解决它。经过认真调查,问题的根本原因是我自定义设置的信号器依赖解析器。
最后我找到了this link那就是说:
Replacing the DependencyResolver
You can change the DependencyResolver to use your DI container of choice by setting GlobalHost.DependencyResolver.
NOTE: DO NOT override the global resolver in PreApplicationStart, it will not work, or it'll work only sometimes. Do it in PostApplicationStart (using WebActivator) or in Global.asax.
这里重要的地方是NOTE。当然,在 signalr 2.0 之后,此文档将弃用。所以我将这里的一些与新的 SignalR API 混合在一起。在新的 SignalR API 中不再使用 WebActivatorEx。首选 OwinStartup 而不是 WebActivator。
[assembly: OwinStartupAttribute(typeof(YourNamespace.Startup))]
namespace YourNamespace
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
//IoC container registration process
UnityConfig.RegisterComponents();
UnityConfig.Container.RegisterType<AHub, AHub>();
HubConfiguration config = new HubConfiguration();
config.EnableJavaScriptProxies = true;
//You should remove your dependency resolver code from here to Global.asax Application_Start method. Before setting the MVC properties.
//config.Resolver = new SignalrDefaultDependencyResolver(UnityConfig.Container); // your dependency resolver
//
app.MapSignalR(config);
}
}
}
在你的 global.asax 中
namespace YourNamespace
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
//Here your SignalR dependency resolver
GlobalHost.DependencyResolver = new SignalrDefaultDependencyResolver(UnityConfig.Container);
//other settings goes on
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
}
我不想在这里发送所有代码,因为它显示了真正的问题。
所以对我来说,目前一切正常。依赖注入(inject)也可以。但不好的地方无处不在,我搜索过 David Fowler 说“这是设计使然”。我开始思考这个设计真的是必要的还是错误的。
希望它能帮助其他研究相同问题的人。
关于c# - SignalR 使用 GlobalHost.ConnectionManager.GetHubContext 从外部集线器调用客户端方法不起作用。但是从集线器内部调用确实,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20561196/
我需要为打开的 xlsx 文件取消隐藏工作表 TAB,为此,我使用 VBS 文件打开 xlsm 文件并激活宏(位于模块中)。 当我手动运行宏时,它可以工作。 当它通过vbs激活时,它只能看到包含宏的x
我正在使用 Google Cloud Compute Engine 安装气流并使其保持正常运行。安装很好,现在它在主机上运行:0.0.0.0:8080 我有此 VM 实例的外部 IP 地址,但是我无法
我们可以在 GWT 中使用这个 $entry 方法来允许外部 javascript 执行 java 方法。 你可以在他们的文档 https://developers.google.com/web-to
在 Cython 的“Hello World”和 C 数学库中调用函数的示例之后 here ,我真正想做的是将我自己的 C 代码放在一个单独的文件中,并在 Cython 中使用它。关注 this ,我
我一直在试验 JSON Pointers引用和重用 JSON schemas . 按照示例,我能够引用在另一个 JSON 模式中声明的特定属性,一切都按预期进行,但是我还没有找到一种方法来扩展基本 J
我正在使用 X.jar 并添加到我的 AspectJ 项目(在 eclipse 中)。我已经为 X.jar 中的 myMethod() 方法编写了切入点和建议。 但是aspectj 并没有拦截这个方法
我正在 Controller 中创建一个自定义指令,并在 ng-repeat 中调用它,如下所示: HTML: JS: 在测试指令中,我按如下方式调用 loadDat
我正在尝试加载服务器上本地存在的 HTML 页面,位于名为 HTML-FIles 的文件夹中。 我想使用 jquery 加载一个文件并将其内容显示在 div 中。 现在,我可以加载文件,但在 div
我正在尝试根据初始选择从 JSON 文件生成选择菜单。我见过很多不同的方式,人们为此编写了一个函数,但想要一些非常简单的东西。 HTML: Please select Practis
我的目标是从 HTML 文档中获取文本,该文档不会调用 .jsp 文件中的任何函数。 我环顾四周,我以为我已经找到了问题的答案,但它似乎不起作用,其他答案包括使用 jQuery(我既不熟悉也不允许使用
我正在尝试从外部 JSON 文件获取文件内容,但我一直在警报中收到 null。 JS: function getText() { var result = null; var file
我正在加载一个外部 javascript 文件,该文件仅填充有 int 或字符串或 bool 值或数组的变量。类似... varBool=false; var1="var1"; var2="var2:
我的数据存储在外部 Javascript 文件中。 看起来像这样, window.videos = [{ "name": "Sample data", "duration": 154,
我有一个包含 Google ADWords 的 HTML 页面,以及来自外部 URL 的 ajax 调用,我想获取 json 来自 url 的数据。外部API也是我做的。API Controller
我试图看看是否有一种简单的方法可以通过外部 JavaScript 函数访问 Controller 的内部范围(与目标 Controller 完全无关) 我在这里看到了其他几个问题 angular.el
我尝试在运行外部命令时终止脚本,结果出现错误。考虑这个简单的代码: try { where.exe Test-App } catch { Write-Error "Exception
我在 test.js 中定义了一个外部 JS 函数 function InvokeSupport(ID, TimeStamp, Hash) { var sUrl = '' + "?uid="
如果我想将变量从外部 js 文件提取到另一个外部 js 文件。我该怎么做? 例如,如果我有一个名为 example1.js 的文件,其中包含以下代码 var test = 1; 如何获取变量 tes
我正在尝试使用 java 从外部 jar 中读取文件..例如,我有两个 jar 文件。一个是“foo.jar”,另一个是“bar.jar”。 “bar.jar”内部是文件“foo-bar.txt”。如
在我的 Java 应用程序中,我希望从未实际加载的类文件以及也未加载的 jar 文件中读取字节码内容。理想情况下,我需要能够获取任何给定的 jarfile,并找到其中的所有类。因此,考虑以下情况: 我
我是一名优秀的程序员,十分优秀!