我想在這裏做的例子: http://www.codeguru.com/csharp/csharp/programming-html5-web-sockets-in-asp.net-4.5.htm(但有一點扭曲,我使用MVC控制器作爲柵極建立網絡套接字連接)使用WebSockets到Windows Azure的連接使用MVC控制器
這是我在mvc4控制器:
public class HandleWSController : Controller
{
//
// GET: /HandleWS/
public ActionResult Index()
{
if (ControllerContext.HttpContext.IsWebSocketRequest)
{
Trace.WriteLine("Inside IsWebSocketRequest check");
ControllerContext.HttpContext.AcceptWebSocketRequest(DoTalking);
}
return View();
}
public async Task DoTalking(AspNetWebSocketContext context)
{
Trace.WriteLine("Inside DoTalking");
WebSocket socket = context.WebSocket;
while (true)
{
var buffer = new ArraySegment<byte>(new byte[1024]);
WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);
Trace.WriteLine("Result: " + result.ToString());
Trace.WriteLine("State: " + socket.State.ToString());
if (socket.State == WebSocketState.Open)
{
string userMessage = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
userMessage = "You sent: " + userMessage + " at " + DateTime.Now.ToLongTimeString();
Trace.WriteLine(userMessage);
buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(userMessage));
await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
}
else
{
break;
}
}
}
}
這是我的看法從我嘗試連接:
<h2>Index</h2>
<input type="text" id="txtMsg" placeholder="Write your message here" /><input type="submit" id="btnSend" value="Send" /><input type="submit" id="btnStop" value="Stop" />
<div id="divHistory">
</div>
<script>
var socket;
$(document).ready(function() {
socket = new WebSocket("ws://wstester.azurewebsites.net/HandleWS/Index");
socket.onopen = function (evt) {
$("#divHistory").html('<h3>Connection Opened with the Echo server.</h3> ');
}
socket.onmessage = function (evt) {
$("#divHistory").html('<h3>' + evt.data + '</h3> ');
}
socket.onerror = function (evt) {
$("#divHistory").html('<h3>Unexpected Error.</h3> ');
}
});
$("#btnSend").click(function() {
if (socket.readyState == WebSocket.OPEN) {
socket.send($("#txtMsg").val());
}
else {
$("#divHistory").append('<h3>The underlying connection is closed.</h3> ');
}
});
$("#btnStop").click(function() {
socket.close();
});
</script>
正如你可以看到我心中已經e一直在試圖用trace來找出錯誤。記錄「內部IsWebSocketRequest檢查」記錄,但DoTalking方法內部的跟蹤不是。
當我嘗試運行它時,出現「底層連接已關閉」消息。 Web站點在Azure上啓用。我不知道端口,但後來因爲我在mvc中使用控制器,我想80端口應該是默認的。我的老師對此進行了快速瀏覽,無法弄清楚問題所在。
任何幫助或指針,將不勝感激!
任何你希望我加入到這個問題,缺什麼嗎? –