2017-05-03 8 views
0

J'ai une application Asp.Net MVC 4 (Application A) qui utilisera SignalR pour les mises à jour en temps réel pour les utilisateurs. J'utilise la version 1.1.4 de SignalR en raison de l'ancienne version du framework .net avec laquelle nous travaillons.Comment déclencher le signal SignalR de l'application externe (qui n'utilise pas SignalR)

Il existe une application externe (Application B) qui, lorsqu'une commande est soumise, je souhaite informer l'application A d'envoyer une notification de commande. Mes pensées initiales sont soit de créer un service Web ASP.NET pour héberger SignalR, mais parce que l'application B n'utilisera pas SignalR, je suppose que juste faire un appel au contrôleur de l'application A transmettre les données nécessaires fonctionnera pour ce qui est nécessaire. Donc, à partir de l'application B, comment appellerais-je le contrôleur de l'application A pour transmettre les données nécessaires? Ajax peut-il être utilisé pour faire un appel à une application externe? Si oui, à quoi ressemblerait la méthode du contrôleur?

Il s'agit des deux applications intranet avec authentification Windows.

+0

On dirait que vous avez besoin d'une file d'attente de messages (tout type fera). –

+0

@MattJohnson, merci Matt. Ce sera un peu une courbe d'apprentissage pour moi, alors je vais essayer William en premier. Mais merci de m'avoir présenté à ce sujet car c'est certainement quelque chose à regarder dans le futur. – eaglei22

Répondre

1

Je figure que simplement faire un appel au contrôleur d'application A transmettre les données nécessaires travailleront pour ce qui est nécessaire

Vous pouvez utiliser le HttpClient dans la demande B d'appeler une action de contrôleur dans la demande A.

Exemple de création d'un ordre et d'envoyer l'ordre à un autre contrôleur d'application MVC (pas testé).

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"); 
} 

EDIT

Vous pouvez utiliser - UseDefaultCrendentials ou passer le credentials directement.

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

OU

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

Parfait, merci. Lorsque cela se produit, cela utilisera le compte Windows de l'utilisateur pour l'authentification correcte? Il s'agit d'une application intranet dans laquelle l'utilisateur est authentifié à l'aide de l'authentification Windows. – eaglei22

+0

J'ai modifié ma réponse. –

+0

Y a-t-il quelque chose de différent que je devrais faire si je veux juste passer une chaîne? En utilisant ici, "https://weblog.west-wind.com/posts/2012/Mar/21/ASPNET-Web-API-and-Simple-Value-Parameters-from-POSTed-data" comme référence j'ai essayé [ FromBody] l'appel à la méthode, et également passé la chaîne et je continue à obtenir null. – eaglei22