如何从外部应用程序(不使用SignalR)启动SignalR集线器

如何从外部应用程序(不使用SignalR)启动SignalR集线器

问题描述:

我有一个Asp.Net MVC 4应用程序(应用程序A),它将使用SignalR实时更新用户。由于我们正在使用旧的.net框架版本,因此我使用SignalR版本1.1.4。如何从外部应用程序(不使用SignalR)启动SignalR集线器

有一个外部应用程序(应用程序B),当提交订单时,我想通知应用程序A发送订单通知。

我最初的想法是要么创建一个ASP.NET Web服务来承载SignalR,而是因为应用程序B不会使用SignalR我认为只是调用应用程序A的控制器来传递必要的数据将适用于什么需要。

因此,从应用程序B,我将如何调用应用程序A的控制器来传递必要的数据? Ajax可以用来打电话给外部应用程序吗?如果是这样,控制器方法会是什么样子?

这些都是具有Windows身份验证的Intranet应用程序。

+0

听起来像是你需要一个消息队列(任何一种都行)。 –

+0

@MattJohnson,谢谢马特。这对我来说有点学习曲线,所以我会尝试William的第一个。但是谢谢你向我介绍这个话题,因为这绝对是展望未来的一些东西。 – eaglei22

我的身影,只是在打电话给应用程序的控制器A 通过必要的数据将用于工作所需要的

可以使用HttpClient在应用程序B调用中的应用的控制器行动A.

创建订单和发送的顺序到另一个MVC应用控制器(未测试)实施例

private HttpClient client = new HttpClient(); 

public HomeController() 
{ 
    client.BaseAddress = new Uri("http://localhost:49277"); 
    client.DefaultRequestHeaders.Accept.Add(
    new MediaTypeWithQualityHeaderValue("application/json")); 
} 

[HttpPost] 
public ActionResult Insert(Order order) 
{ 
    HttpResponseMessage response = client.PostAsJsonAsync<Order>("/Order/Post" + $"/{order.OrderID}", order).Result; 
    return RedirectToAction("Index"); 
} 

编辑

您可以使用 - UseDefaultCrendentials或直接通过credentials

using (var handler = new HttpClientHandler {UseDefaultCredentials = true}) 
{ 
    using (var client = new HttpClient(handler)) 
    { 
    ... 
    } 
}  

OR

var credentials = new NetworkCredential(userName, password); 
using (var handler = new HttpClientHandler {Credentials = credentials }) 
{ 
    using (var client = new HttpClient(handler)) 
    { 
     ... 
    } 
} 
+0

完美,谢谢。发生这种情况时,这将使用用户的Windows帐户进行身份验证是否正确?这是一个Intranet应用程序,用户最初使用Windows身份验证进行身份验证。 – eaglei22

+0

我编辑了我的答案。 –

+0

如果我只想传递一个字符串,是否还有什么不同?在这里使用“https://weblog.west-wind.com/posts/2012/Mar/21/ASPNET-Web-API-and-Simple-Value-Parameters-from-Posted-data”作为参考我试过[ FromBody]方法的调用,并且还传递了字符串,我一直得到null。 – eaglei22