Ich testet .net Kern und eine kleine Beispiel-App mit .net Core + Websockets, um einige Daten in meine App zu schieben. Ich möchte diese Daten in der Datenbank mit einem dbcontext speichern..net Kern Websockets erhalten DbContext
Ich habe jedoch Probleme beim Abrufen der dbcontext in meinem Websocket-Handler. Also, wie kann ich einen dbcontext erstellen, um zu verwenden.
Mein Start Configure-Methode enthält diese:
...
app.Map("/ws", WSHandler.Map);
...
Das ist mein WSHandler Klasse, die tatsächlich Geräte aus der eingehenden Verbindung zu lesen. Ich brauche hier einen DbContext, mit dem ich aus der Datenbank lesen/schreiben kann.
/// <summary>
/// Handler for an incoming websocket client
/// </summary>
public class WSHandler {
/// <summary>
/// Max size in bytes of an incoming/outgoing message
/// </summary>
public const int BufferSize = 4096;
/// <summary>
/// The socket of the current connection
/// </summary>
WebSocket socket;
/// <summary>
/// Constructor, assign socket to current instance and adds socket to ConnectedClients.
/// </summary>
/// <param name="socket"></param>
WSHandler(WebSocket socket) {
this.socket = socket;
}
/// <summary>
/// Configure app to use websockets and register handler.
/// </summary>
/// <param name="app"></param>
public static void Map(IApplicationBuilder app) {
app.UseWebSockets();
app.Use((WSHandler.Acceptor);
}
/// <summary>
/// Accept HttpContext and handles constructs instance of WSHandler.
/// </summary>
/// <param name="hc">The HttpContext</param>
/// <param name="n">Task n</param>
/// <returns></returns>
static async Task Acceptor(HttpContext hc, Func<Task> n) {
if (hc.WebSockets.IsWebSocketRequest == false) {
return;
}
var socket = await hc.WebSockets.AcceptWebSocketAsync();
var h = new WSHandler(socket);
await h.Loop();
}
/// <summary>
/// Wait's for incoming messages
/// </summary>
/// <returns></returns>
async Task Loop() {
var buffer = new Byte[BufferSize];
ArraySegment<Byte> segment = new ArraySegment<byte>(buffer);
while (this.socket.State == WebSocketState.Open) {
WebSocketReceiveResult result = null;
do {
result = await socket.ReceiveAsync(segment, CancellationToken.None);
} while (result.EndOfMessage == false);
// do something with message here. I want to save parse and save to database
}
}
}
Hallo, @John Smith. Hast du dieses Problem gelöst? Ich bin jetzt auf der Suche nach der Lösung – Mergasov
@Mergasov ja lassen Sie mich auf den Code gehen, und ich werde die Antwort posten. –