我刚刚使用本指南构建了一个简单的“聊天”-App:http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-getting-started-with-signalr-20-and-mvc-5
的技术: 的
服务器: ASP.NET MVC 5 + SignalR 2.0
客户端: HTML5 / jQuery 2.0.3
构建应用:Cordova
只要我将它用作常规网络应用程序,我就可以开始聊天了,但是如果我开始将它编译为带有cordova的应用程序,则没有任何反应。
1)“ChatHub”[Serverh / C#]
using System;
using System.Web;
using Microsoft.AspNet.SignalR;
namespace SignalRChatMVC.Hubs{
public class ChatHub : Hub
{
public void Send(string name, string message)
{
// Call the addNewMessageToPage method to update clients.
Clients.All.addNewMessageToPage(name, message);
}
}
}
路径中的2)“index.html”
"VisualStudioPath\Projects\SignalRChatMVC\SignalRChatMVC\native\net.Companyname.Projectname\www"
<html>
<head>
<meta charset="utf-8" />
<meta name="format-detection" content="telephone=no" />
<link rel="stylesheet" type="text/css" href="css/index.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Chat - My ASP.NET Application</title>
<link href="/Content/bootstrap.css" rel="stylesheet">
<link href="/Content/site.css" rel="stylesheet">
<script src="/Scripts/modernizr-2.7.2.js"></script>
<script src="/Scripts/jquery-2.1.0.min.js"></script>
</head>
<body>
<div class="app">
<h2>Chat</h2>
<div class="container">
<input type="text" id="message" />
<input type="button" id="sendmessage" value="Send" />
<input type="hidden" id="displayname" />
<ul id="discussion"></ul>
</div>
<!--Script references. -->
<!--The jQuery library is required and is referenced by default in _Layout.cshtml. -->
<!--Reference the SignalR library. -->
<script src="/Scripts/jquery.signalR-2.0.3.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="/signalr/hubs"></script>
<!--SignalR script to update the chat page and send messages.-->
<script>
$(function () {
// Reference the auto-generated proxy for the hub.
var chat = $.connection.chatHub;
<!-- $.connection.hub.url = "http://nightcrawler:1234"; -->
// Create a function that the hub can call back to display messages.
chat.client.addNewMessageToPage = function (name, message) {
// Add the message to the page.
$('#discussion').append('<li><strong>' + htmlEncode(name)
+ '</strong>: ' + htmlEncode(message) + '</li>');
};
// Get the user name and store it to prepend to messages.
$('#displayname').val(prompt('Enter your name:', ''));
// Set initial focus to message input box.
$('#message').focus();
// Start the connection.
$.connection.hub.start().done(function () {
$('#sendmessage').click(function () {
// Call the Send method on the hub.
chat.server.send($('#displayname').val(), $('#message').val());
// Clear text box and reset focus for next comment.
$('#message').val('').focus();
});
});
});
// This optional function html-encodes messages for display in the page.
function htmlEncode(value) {
var encodedValue = $('<div />').text(value).html();
return encodedValue;
}
</script>
</div>
<!-- <script type="text/javascript" src="cordova.js"></script> -->
<script type="text/javascript" src="js/index.js"></script>
<script type="text/javascript">
app.initialize();
</script>
</body>
3)在浏览器中调用我的mashine
"http://{computername}:1234"
有效,我可以在任何浏览器/标签或设备上写信息。
4)现在我开始使用cordova进行编译:
cmd: "{VisualStudioPath}\Projects\SignalRChatMVC\SignalRChatMVC\native\net.{Companyname}.{Projectname}"> cordova build blackberry10
cmd: "{VisualStudioPath}\Projects\SignalRChatMVC\SignalRChatMVC\native\net.{Companyname}.{Projectname}"> cordova run blackberry10
只显示主屏幕。
有没有人知道如何调试本机应用程序和/或知道为什么它不会为本机应用程序而烦恼? 它可能与黑莓的路径有关,而不是
"{VisualStudioPath}\Projects\SignalRChatMVC\SignalRChatMVC\native\net.{Companyname}.{Projectname}\www"
但是
"{VisualStudioPath}\Projects\SignalRChatMVC\SignalRChatMVC\native\net.oh22.oh22Push\platforms\blackberry10\www"
或者它有什么可做的事情,没有真正的浏览器能够使用SignalR?
(应该可以直接在黑莓上调试)
非常感谢
答案 0 :(得分:2)
<script src="/signalr/hubs"></script>
可能不对。
如果资源未与您的“index.html”捆绑在一起,而是需要通过网络访问,则可能需要使用绝对路径引用它。例如:
<script src="http://{computername}:1234/signalr/hubs"></script>
您可以预生成/signalr/hubs
脚本,以便将其捆绑:http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-javascript-client#manualproxy
最后,$.connection.hub.url = "http://nightcrawler:1234";
应为$.connection.hub.url = "http://nightcrawler:1234/signalr";
。
答案 1 :(得分:0)
添加
的方法 $.connection.hub.url = "http://{computername}:1234/signalr";
对我来说非常好。