Utilisation de WebSockets avec l'API Web ASP.NET
Quelle est la méthode préférée pour l'aide de matières websockets dans un ASP.NET application d'API Web?
Nous aimerions utiliser binaire WebSockets sur un couple de nos interfaces de nos ASP.NET l'API Web de l'application. Je vais avoir un moment difficile de déterminer comment cela doit être fait comme il semble y avoir plusieurs contradictoires et/ou périmés implémentations en ligne pour .NET.
Il y a des exemples qui semblent être ASP.NET comme ce unmais je pense il doit y avoir un moyen d'utiliser les websockets dans le cadre de l'API Web. Comme je sais que vous pouvez utiliser Signalr dans WebAPI.
Je pensée à l'aide de Microsoft.AspNet.SignalR.Les WebSockets.WebSocketHandler pourrait fonctionner, mais je ne suis pas sûr de la façon de lier le WebSocketHandler au Contrôleur...
class MyServiceController : ApiController
{
[HttpGet]
public HttpResponseMessage SwitchProtocols (string param)
{
HttpContext currentContext = HttpContext.Current;
if (currentContext.IsWebSocketRequest ||
currentContext.IsWebSocketRequestUpgrading)
{
//several out-dated(?) examples would
//use 'new MySocketHandler' for ???
var unknown = new ????
currentContext.AcceptWebSocketRequest(unknown);
return Request.CreateResponse(HttpStatusCode.SwitchingProtocols);
}
}
}
class MySocketHandler : WebSocketHandler
{
public MySocketHandler(): base(2048){}
...
}
Malheureusement, AcceptWebSocketRequest n'accepte plus que les WebSocketHandler, au lieu de sa nouvelle signature est...
public void AcceptWebSocketRequest(Func<AspNetWebSocketContext, Task> userFunc)
Quelqu'un aurait un lien ou un échantillon rapide de mise en œuvre brute websockets dans ASP.NET l'API Web de l'application est à jour?
source d'informationauteur Tony
Vous devez vous connecter pour publier un commentaire.
Mise à JOUR: Après une recherche un peu plus par moi-même et un collègue de travail, nous en sommes venus à la conclusion que la WebSocketHandler classe ne semble pas être destinés à être utilisés à l'extérieur des processus internes de SignalR. Comme il n'est pas évident de trouver un moyen de mettre à profit WebSocketHandler isolé à partir de SignalR. C'est malheureux, car je trouve ses interfaces légèrement plus haute que le niveau du Système.Web/Système.Net interfaces. En outre, la méthode décrite ci-dessous permet l'utilisation de HttpContext qui je croire doit être évitée.
En tant que tel, nous avons l'intention de prendre une approche similaire à celle présentée par Mrchief, mais avec un peu plus de l'API Web de saveur. C'est comme ça...(NOTE: notre socket est en écriture seule, mais j'ai découvert que vous DOIT effectuer les opérations de lecture si vous voulez WebSocket.L'etat pour obtenir mis à jour correctement.
REMARQUE: Évidemment, la vérification des erreurs et l'utilisation correcte d'un CancellationToken est laissé comme exercice pour le lecteur.
C'est une vieille question, mais je voudrais ajouter une autre réponse à cette question.
Il s'avère, vous POUVEZ l'utiliser, et je n'ai aucune idée de pourquoi ils l'ont fait de manière "cachée". Ce serait bien si quelqu'un pourrait m'expliquer quel est le problème avec cette classe, ou si ce que je fais ici est en quelque sorte "interdit" ou "mauvais design".
Si nous regardons dans la
Microsoft.Web.WebSockets.WebSocketHandler
nous trouvons cette méthode publique:Cette méthode est caché intellisense, mais il est là, et peut être appelée sans erreurs de compilation.
Nous pouvons utiliser cette méthode pour obtenir la tâche que nous devons revenir dans la
AcceptWebSocketRequest
méthode. Check this out:Et puis dans mon API contrôleur:
Cela fonctionne tout à fait acceptable. OnMessage se déclenche, et revient en écho à mon JavaScript instancié WebSocket...
J'ai trouvé ce exemple:
Exemple de code (reproduit à partir de la poste):
Partage mon code sur la base de Tony réponse avec un nettoyant pour tâche de manutention. Ce code envoie de l'heure UTC actuelle environ chaque seconde:
Que sur l'utilisation de SignalR 2?
-Tutoriel ici