.net 코어를 테스트하고 .net 코어 + 웹 소켓을 사용하여 작은 샘플 응용 프로그램을 만들어 내 응용 프로그램에 일부 데이터를 푸시합니다. dbcontext를 사용하여이 데이터를 데이터베이스에 저장하려고합니다..net core websockets는 DbContext를 얻습니다.
그러나 내 websocket 처리기에서 dbcontext를 가져 오는 데 문제가 있습니다. 그렇다면 어떻게 dbcontext를 만들어 사용할 수 있습니까?
내 시작 구성 방법이 포함되어 있습니다
...
app.Map("/ws", WSHandler.Map);
...
이 실제로 들어오는 연결에서 내 WSHandler 클래스 읽기 구현합니다됩니다. 여기에 데이터베이스에서 읽고 쓸 수있는 DbContext가 필요합니다.
/// <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
}
}
}
안녕하세요, @ 존 스미스. 이 문제를 해결 했습니까? 지금 솔루션을 찾고 있어요 – Mergasov
@Mergasov 예 코드로 이동하게하고 대답을 게시 할 것입니다. –