I am trying to build a SignalR application in Visual Studio 2012. My problem is that it works well under Visual Studio debug (using Visual Studio 2012 on Windows 7), but when I try to deploy the app on IIS 8 on Windows Server 2012, the app does nothing more than displaying the index.html page.
I decided to try to narrow down whether the issue is in my code or in SignalR. I compiled the SignalR tutorial shown at http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr. This works fine under Visual Studio but, once again, does not do anything other than displaying a static page under IIS.
I have tried some of the methods listed here: Signalr/Hub not loading in IIS 7 but working correctly in Visual Studio, but none of them seem to work.
Supported server IIS versions Also note that for SignalR to use WebSocket, IIS 8 or IIS 8 Express must be used, the server must be using Windows 8, Windows Server 2012, or later, and WebSocket must be enabled in IIS.
The . NET client runs on any platform supported by ASP.NET Core. For example, Xamarin developers can use SignalR for building Android apps using Xamarin. Android 8.4.
From years immemorable, web browsers were (and still are)... well,... desktop applications... So you have desktop applications (the web broswer) that use SignalR to connect to a web site (the web server). So, not only is it correct to use signalR for desktop applications, but this is what it is meant for.
The SignalR Hubs API enables you to make remote procedure calls (RPCs) from a server to connected clients and from clients to the server. In server code, you define methods that can be called by clients, and you call methods that run on the client.
Assuming that you actually want to see index.html
(i.e. your question is not "an empty index.html is showing instead of my chat page chat.html"), then it sounds like when you enter something into the chat page it is not showing up as a chat in other browser windows who are connected to the chat.
I would try a few basic tests. I am going to assume that:
Microsoft.AspNet.SignalR.Core.dll
, Microsoft.AspNet.SignalR.Owin.dll
, Microsoft.AspNet.SignalR.SystemWeb.dll
and the others).I would try the following tests:
yourdomainnamehere.com/index.html
(or reload it if you are already there)index.html
signalr/hubs
signalr/negotiate
(with a query string)signalr/connect
(with a query string)So:
If you see that, but not 4.1 above, then there is a problem with the ASP.NET routing. Check that you have this as the first line in your Application_Start
:
protected void Application_Start(object sender, EventArgs e)
{
// Register the default hubs route: ~/signalr/hubs
RouteTable.Routes.MapHubs();
}
If you see that, but not 4.2 or 5.1 then there is a problem with your javascript that is preventing the $.connection.hub.start()
code being called.
Now you need to turn on client side logging on signalr. In your index.html chat page, where you see the $.connection.hub.start().done(function () {
line, add the following so that the code reads:
$.connection.hub.logging = true;
$.connection.hub.start().done(function () {`
Open the browser dev tools again, and switch to the console tab. Now load the page and send a chat. See what error messages you get, if any. Succesfully opening the page and sending a chat message should generate a log such as:
LOG: [12:34:56 UTC+0100] SignalR: Negotiating with '/signalr/negotiate'.
LOG: [12:34:56 UTC+0100] SignalR: This browser doesn't support SSE.
LOG: [12:34:56 UTC+0100] SignalR: Binding to iframe's readystatechange event.
LOG: [12:34:56 UTC+0100] SignalR: Now monitoring keep alive with a warning timeout of 13333.333333333332 and a connection lost timeout of 20000
LOG: [12:34:56 UTC+0100] SignalR: Triggering client hub event 'broadcastMessage' on hub 'ChatHub'.
Using your signalr endpoint website, create a new page:
TestAspNet.aspx
. <asp:Label runat="server" ID="lblTest"></asp:Label>
Page_Load
: this.lblTest.Text = DateTime.Now.ToLongTimeString();
Now deploy this to your web server, and navigate to http://yourdomainnamehere.com/TestAspNet.aspx
. If this shows you the current server time, you know ASP.NET is installed on the server. If not then there are two options:
yourdomainnamehere.com
If you think that another site might be using the host header, then you can use powershell to easily check this on Win Server 2102:
Import-Module WebAdministration
Get-WebBinding |? bindingInformation -match .*mydomainname.com.* | ft protocol, bindingInformation, ItemXPath -AutoSize
The site name and id are shown under the result column ItemXPath
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With