c# IIS WebSocket 模块未启用。有关如何启用该模块的详细信息

qq_35092139 2016-05-23 03:35:55
业务需求要用websocket做个功能,本人小白网上搜了个websocket的demo
但连接时就报这个错----"IIS WebSocket 模块未启用。有关如何启用该模块的详细信息"
页面代码:
<input type="button" value="连接" id="btnConnect"/>
<input type="button" value="断开" id="btnDisConnect"/>
<hr/>
<input type="text" id="txtInput"/>
<input type="button" value="发送" id="btnSend"/>
<br/>
<span id="messageSpan" style="color:red;"></span>
<script>
var ws;
$(function () {
$("#btnConnect").click(function () {
$("#messageSpan").text("Connection...");
ws = new WebSocket("ws://" + window.location.hostname + ":" + window.location.port + "/api/WSChat");
ws.onopen = function () {
$("#messageSpan").text("Connected!");
};
ws.onmessage = function (result) {
$("#messageSpan").text(result.data);
};
ws.onerror = function (error) {
$("#messageSpan").text(error.data);
};
ws.onclose = function () {
$("#messageSpan").text("Disconnected!");
};
});
$("#btnSend").click(function () {
if (ws.readyState == WebSocket.OPEN) {
ws.send($("#txtInput").val());
}
else {
$("messageSpan").text("Connection is Closed!");
}
});
$("#btnDisconnect").click(function () {
ws.close();
});
}
);
</script>
后台代码:
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.WebSockets;

namespace StUnityPlatform.Controllers
{
public class WSChatController : ApiController
{
public HttpResponseMessage Get()
{
//if (HttpContext.Current.IsWebSocketRequest)
//{
HttpContext.Current.AcceptWebSocketRequest(ProcessWSChat);
//}
return new HttpResponseMessage(HttpStatusCode.SwitchingProtocols);
}

private async Task ProcessWSChat(AspNetWebSocketContext arg)
{
WebSocket socket = arg.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 message = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
string returnMessage = "You send :" + message + ". at" + DateTime.Now.ToLongTimeString();
buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(returnMessage));
await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
}
else
{
break;
}
}
}
}
}
求大大们帮忙,项目是mvc4,后台代码中的if不注释的话就是不进if,HttpContext.Current.IsWebSocketRequest的返回值总是false
...全文
709 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_36753766 2017-08-28
  • 打赏
  • 举报
回复
1544851705@qq.com 哪位大神有DEMO 或者解决办法 发我邮箱 十分感谢
qq_36753766 2017-08-28
  • 打赏
  • 举报
回复
楼主,请问你怎么解决的呢?我现在也碰到同样的问题了不知所措~~
527395632 2017-01-03
  • 打赏
  • 举报
回复
开发websocket功能需要系统支持, 在安装IIS的时候把"websocket支持"这项勾上,这个功能只有在win8+或者window server 2012+的系统上才能使用,版本低了用不了,所以会报这个错,你把开发环境的系统和服务器系统升级下就好了,不是代码有问题,多查查资料!有问题QQ527395632
sloder 2016-08-03
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
有一个.net 开源的 websocket 服务器 Fleck,你可以看它的例子,编程非常简单。 你可以在自己的console、windows service 甚至 winform、wpf 应用中引用它的 dll(通过 NuGet 安装到工程里即可,不用从网页去下载)。
你在IIS上搭建过websocket服务吗?
  • 打赏
  • 举报
回复
有一个.net 开源的 websocket 服务器 Fleck,你可以看它的例子,编程非常简单。 你可以在自己的console、windows service 甚至 winform、wpf 应用中引用它的 dll(通过 NuGet 安装到工程里即可,不用从网页去下载)。
我爱大蜗牛 2016-06-04
  • 打赏
  • 举报
回复 1
那个例子有问题,好多人在那卡住了,HttpContext.Current.IsWebSocketReques首先t这一句就过不去总是false,webSocket模块没开启
qq_35092139 2016-05-25
  • 打赏
  • 举报
回复
大神们,急呀,帮帮忙

110,525

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧