C# 如何从当前上下文获取AspNetWebSocketContext?

C# 如何从当前上下文获取AspNetWebSocketContext?,c#,websocket,.net-4.5,C#,Websocket,.net 4.5,我正在使用Microsoft webscoket实现ASP.net websocket服务器。我有一个向客户端发送数据的函数。下面是课堂 public class MyWebSocketHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { if (context.IsWebSocketRequest) {

我正在使用Microsoft webscoket实现ASP.net websocket服务器。我有一个向客户端发送数据的函数。下面是课堂

public class MyWebSocketHandler : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            if (context.IsWebSocketRequest)
            {
                context.AcceptWebSocketRequest(DoTalking);

            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

        public async Task DoTalking(AspNetWebSocketContext context)
        {
            WebSocket socket = context.WebSocket;
            while (true)
            {
                ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
                WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);
                if (socket.State == WebSocketState.Open)
                {
                    string userMessage = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
                    userMessage = "Message from client : " + userMessage;

                }
                else
                {
                    break;
                }
            }
        }

        public async Task SendToClient(AspNetWebSocketContext context)
        {
            WebSocket socket = context.WebSocket;
            //WebSocket socket = context.WebSocket;
            ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
            buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(message));
            await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
        }

        public void callSendToClient()
        {
                var task = SendToClient(Problem is here!);
                task.Wait();  
        }

        private string message { get; set; }
    }
}
公共类MyWebSocketHandler:IHttpHandler
{
公共void ProcessRequest(HttpContext上下文)
{
if(context.IsWebSocketRequest)
{
AcceptWebSocketRequest(DoTalking);
}
}
公共布尔可重用
{
得到
{
返回false;
}
}
公共异步任务点通话(AspNetWebSocketContext)
{
WebSocket套接字=context.WebSocket;
while(true)
{
ArraySegment缓冲区=新的ArraySegment(新字节[1024]);
WebSocketReceiveResult结果=等待套接字.ReceiveAsync(缓冲区,CancellationToken.None);
if(socket.State==WebSocketState.Open)
{
string userMessage=Encoding.UTF8.GetString(buffer.Array,0,result.Count);
userMessage=“来自客户端的消息:”+userMessage;
}
其他的
{
打破
}
}
}
公共异步任务发送到客户端(AspNetWebSocketContext)
{
WebSocket套接字=context.WebSocket;
//WebSocket套接字=context.WebSocket;
ArraySegment缓冲区=新的ArraySegment(新字节[1024]);
buffer=newarraysegment(Encoding.UTF8.GetBytes(message));
wait socket.SendAsync(缓冲区,WebSocketMessageType.Text,true,CancellationToken.None);
}
public void callSendToClient()
{
var task=SendToClient(问题就在这里!);
task.Wait();
}
私有字符串消息{get;set;}
}
}

我的问题是如何在调用SendToClient方法时获取AspNetWebSocketContext?我被困在这一点上。实际上,我想从另一个.aspx页面调用SendToClient()方法。需要一些帮助。

解决方案很简单。您已将WebSocketReceiveResult结果设置为方法内部的局部变量。相反,将其声明为类内的静态变量。@jdweng我不明白你的意思。你能给我举个例子吗?静态WebSocketReceiveResult结果=null;公共异步任务DoTalking(AspNetWebSocketContext){result=await socket.ReceiveAsync(buffer,CancellationToken.None)}@jdweng谢谢!