Sto tentando di creare un client iOS PhoneGap per un server di chat SignalR di base in esecuzione (ASP.NET MVC 4). Tutto funziona alla perfezione quando si accede da una pagina di un browser, ma non riesco a connetterlo dall'app PhoneGap. Ecco le parti pertinenti del mio codice:Come connettersi a un hub SignalR dall'app PhoneGap su iOS?
global.asax Server
protected void Application_Start()
{
// Register the default hubs route: ~/signalr * This must be registered before any other routes
RouteTable.Routes.MapHubs(new HubConfiguration { EnableCrossDomain = true });
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
web.config Server
<configuration>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"></modules>
</system.webServer>
</configuration>
hub Server client
public class ChatHub : Hub
{
public void Send(string name, string message)
{
Clients.All.broadcastMessage(name, message);
}
}
PhoneGap
<body>
<div data-role="page">
<div data-role="header">
<h1>Life As A Pixel</h1>
</div><!-- /header -->
<div data-role="content">
<label for="username">Name:</label>
<input type="text" name="username" id="username" value="" />
<label for="message">Message:</label>
<input type="text" name="message" id="message" value="" />
<br>
<input type="button" value="Send" id="sendmessage" />
</div><!-- /content -->
<div data-role="footer" data-position="fixed">
<h4></h4>
</div><!-- /footer -->
</div><!-- /page -->
<script type="text/javascript" src="cordova-2.7.0.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<script type="text/javascript" src="js/jquery-1.9.1.js"></script>
<script type="text/javascript" src="js/jquery.mobile-1.3.1.js"></script>
<script type="text/javascript" src="js/jquery.signalR-1.0.0-rc1.min.js"></script>
<script type="text/javascript" src="http://www.mysite.com/signalr/hubs"></script>
<script type="text/javascript">
app.initialize();
</script>
<script type="text/javascript">
$(function() {
// Declare a proxy to reference the hub
jQuery.support.cors = true;
$.connection.hub.url = 'http://www.mysite.com/signalr';
var chat = $.connection.chatHub;
alert(chat);
//alert(chat);
// Create a function that the hub can call to broadcast messages.
//chat.client.broadcastMessage = function (name, message) {
//$('#discussion').append('<li><strong>' + name
// + '</strong>: ' + message + '</li>');
//};
// Set initial focus to message input box.
//$('#message').focus();
// Start the connection.
$.connection.hub.start({ jsonp: true }).done(function() {
alert("connected");
$('#sendmessage').click(function() {
// Html encode display name and message.
var encodedName = $('<div />').text($('#username').val()).html();
var encodedMsg = $('<div />').text($('#message').val()).html();
// Call the Send method on the hub.
chat.send(encodedName, encodedMsg);
// Clear text box and reset focus for next comment.
$('#message').val('').focus();
});
}).fail(function() {
alert("Failed to connect");
});
});
</script>
</body>
Ho attraversato un sacco di siti che parlano di parti e parti di esso, ma non riesco a capire.
Grazie in anticipo, Jason
http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-javascript-client#crossdomain. Leggi attentamente le note. – davidfowl
Grazie per l'articolo dfowler. In realtà avevo rimosso la linea cors come menzionato nelle note come uno dei tanti passaggi di debug che ho fatto, ma non ha fatto alcuna differenza. In realtà non avevo mai trovato quel particolare articolo e sembra abbastanza buono, quindi lo esaminerò e vedrò se c'è qualcos'altro che potrebbe aiutare. – Jason
Hai mai avuto fortuna con questo? Stavo cercando di testare la stessa cosa. – user441521