2017-05-03 82 views
0

我有一個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

回答

1

我的身影,只是在打電話給應用程序的控制器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