I'm implementing the ClassyTaxiAppKotlin + ClassyTaxiServer project but without success.
I followed all the steps in the tutorial.
Apparently the ClassyTaxiAppKotlin android app is functional, processes the subscription purchase order and sends the information to the CLOUD FUNCTIONS, but does not receive the purchase registration/confirmation.
In my understanding, upon receiving the payment confirmation, PLAY STORE must send this confirmation to the ClassyTaxiServer server so that the server returns the registration/confirmation of the purchase and grants access to the ClassyTaxiAppKotlin application.
So when confirming payment in ClassyTaxiAppKotlin app, I notice that I get some logs in firebase functions from (instanceId_register_v2, realtime_notification_listener AND subscription_register_v2), but the registration/confirmation of payment doesn't complete due to a server error (500) and doesn't release the access in the ClassyTaxiAppKotlin app.
Note: service-account.json is already configured
Does anyone have any idea why this error is occurring and indicate how I can solve it?
Code where the error points:
private async querySubscriptionPurchaseWithTriggerV2(packageName: string, product: string, purchaseToken: string, triggerNotificationType?: NotificationType): Promise<SubscriptionPurchaseV2> {
// STEP 1. Query Play Developer API to verify the purchase token
const apiResponseV2 = await new Promise((resolve, reject) => {
this.playDeveloperApiClient.purchases.subscriptionsv2.get({ // <<=== Server error: Cannot read property 'get' of undefined
packageName: packageName,
token: purchaseToken
}, (err, result) => {
if (err) {
reject(this.convertPlayAPIErrorToLibraryError(err));
} else {
resolve(result.data);
}
})
});
LOGS Firebase Functions
6:55:28.798 PM instanceId_register_v2 Function execution started
6:55:31.025 PM instanceId_register_v2 Instance id is ddR1Hi...NOO2Z
6:55:31.122 PM instanceId_register_v2 Instance Id specified and verified
6:55:31.122 PM instanceId_register_v2 Instance verification passed
6:55:31.774 PM instanceId_register_v2 Function execution took 2976 ms, finished with status code: 200
6:55:53.623 PM realtime_notification_listener ========> purchase: null PACKAGE_NAME: com.example.subscriptions
6:55:53.624 PM realtime_notification_listener Function execution took 5 ms, finished with status: 'ok'
6:55:57.537 PM subscription_register_v2 Function execution started
6:55:59.817 PM subscription_register_v2 Server error: Cannot read property 'get' of undefined
6:55:59.825 PM subscription_register_v2 Function execution took 2289 ms, finished with status code: 500
LOGS Android Studio
D/OkHttp: --> PUT https://us-central1-postosgnv.cloudfunctions.net/subscription_register_v2 http/1.1 (437-byte body)
D/OkHttp: <-- 500 https://us-central1-postosgnv.cloudfunctions.net/subscription_register_v2 (2661ms, 86-byte body)
E/RemoteServerFunction: Failed to call API (Error code: 500) - {"status":500,"error":"not-found","message":"Cannot read property 'get' of undefined"}
As per the answer found HERE, the issue was solved by updating the GoogleApis package in the package.json from "googleapis": "^67.0.0" -> "googleapis": "105.0.0"
I have an app connected to FirebaseAnalytics. I can see that I am sending the screen_view event, and that it is arriving (as is the user_engagement event); but this isn't resulting in the scores appearing in the userEngagement dashboard.
Is there another property that has to be set for the dashboard to show user engagement?
As the events are arriving at Firebase I'm not sure it's relevant but just for completeness I am using #capacitor-community/firebase-analytics on iOS. This is reporting success in the console.
2020-11-07 16:32:28.016270+0000 Development[4563:1132540] 6.34.0 - [Firebase/Analytics][I-ACS023105] Event is not subject to real-time event count daily limit. Marking an event as real-time. Event name, parameters: screen_view (_vs), {
ga_debug (_dbg) = 1;
ga_event_origin (_o) = app;
ga_previous_class (_pc) = /info;
ga_previous_id (_pi) = -3144803485867826237;
ga_previous_screen (_pn) = /info;
ga_realtime (_r) = 1;
ga_screen (_sn) = /welcome;
ga_screen_class (_sc) = /welcome;
ga_screen_id (_si) = -3144803485867826236;
}
2020-11-07 16:32:28.038535+0000 Development[4563:1132540] 6.34.0 - [Firebase/Analytics][I-ACS023087] User property set. Name, value: lifetime_user_engagement (_lte), 6215573
2020-11-07 16:32:28.038767+0000 Development[4563:1132540] 6.34.0 - [Firebase/Analytics][I-ACS023087] User property set. Name, value: session_user_engagement (_se), 703736
2020-11-07 16:32:28.042258+0000 Development[4563:1132793] 6.34.0 - [Firebase/Analytics][I-ACS012018] Saving bundle. size (bytes): 532
2020-11-07 16:32:28.042885+0000 Development[4563:1132793] 6.34.0 - [Firebase/Analytics][I-ACS023116] Bundle added to the upload queue. BundleID, timestamp (ms): 102, 1604766746929
2020-11-07 16:32:28.048243+0000 Development[4563:1132793] 6.34.0 - [Firebase/Analytics][I-ACS023039] Measurement data sent to network. Timestamp (ms), data: 1604766748047, <APMPBMeasurementBatch: 0x2808f90c0>
2020-11-07 16:32:28.052526+0000 Development[4563:1132540] 6.34.0 - [Firebase/Analytics][I-ACS900000] Uploading data. Host: https://app-measurement.com/a
2020-11-07 16:32:28.116422+0000 Development[4563:1132793] 6.34.0 - [Firebase/Analytics][I-ACS901006] Received SSL challenge for host. Host: https://app-measurement.com/a
2020-11-07 16:32:28.168702+0000 Development[4563:1132948] 6.34.0 - [Firebase/Analytics][I-ACS023044] Successful upload. Got network response. Code, size: 204, -1
2020-11-07 16:32:28.173503+0000 Development[4563:1132948] 6.34.0 - [Firebase/Analytics][I-ACS002002] Measurement timer scheduled to fire in approx. (s): -0.2433141469955444
2020-11-07 16:32:28.180798+0000 Development[4563:1132948] 6.34.0 - [Firebase/Analytics][I-ACS002003] Measurement timer canceled
I also agree with Martin, Firebase analytics updates data for 24h, this is actual for collecting data in a/b tests
For anybody else who ends up spending hours debugging this - it's just a processing delay... in the morning (24hours later) the engagement graph has updated.
Do not adjust your screens ;)
I have a problem with WebSocket being disconnected while trying to firstly save entity to the database with EF Core, then to dispatch a message to the clients using SignalR Core.
Everything works perfectly when I separate these two operations, one with AJAX call to the controller's action, to save entity to the database, one with hub method for dispatching messages to the clients. But I want to ensure that the entity is successfully saved, then to be dispatched.
When I try to merge saving entity and dispatching a message to the clients into the same hub method or controller's action (with dependency injection), I've got the errors which could be found down bellow (with log level - trace).
00:51:03.876 [2020-01-04T23:51:03.877Z] Trace: (WebSockets transport) sending data. String data of length 307. Utils.ts:178:39
00:51:04.147 [2020-01-04T23:51:04.148Z] Trace: (WebSockets transport) socket closed. Utils.ts:178:39
00:51:04.148 [2020-01-04T23:51:04.148Z] Debug: HttpConnection.stopConnection(undefined) called while in state Connected. Utils.ts:178:39
00:51:04.148 [2020-01-04T23:51:04.149Z] Information: Connection disconnected. Utils.ts:174:39
00:51:04.149 [2020-01-04T23:51:04.149Z] Debug: HubConnection.connectionClosed(undefined) called while in state Connected. Utils.ts:178:39
00:51:04.149 [2020-01-04T23:51:04.149Z] Information: Connection reconnecting. Utils.ts:174:39
00:51:04.150 [2020-01-04T23:51:04.150Z] Information: Reconnect attempt number 1 will start in 0 ms. Utils.ts:174:39
00:51:04.150 Chat - Error: Invocation canceled due to the underlying connection being closed. conversation line 2 > scriptElement:27:36
00:51:04.153 [2020-01-04T23:51:04.153Z] Debug: Starting connection with transfer format 'Text'. Utils.ts:178:39
00:51:04.154 [2020-01-04T23:51:04.154Z] Debug: Sending negotiation request: http://localhost:11597/chatHub/negotiate?negotiateVersion=1. Utils.ts:178:39
00:51:04.168 [2020-01-04T23:51:04.169Z] Debug: Selecting transport 'WebSockets'. Utils.ts:178:39
00:51:04.168 [2020-01-04T23:51:04.169Z] Trace: (WebSockets transport) Connecting. Utils.ts:178:39
00:51:04.179 [2020-01-04T23:51:04.180Z] Information: WebSocket connected to ws://localhost:11597/chatHub?id=Amf9CsFZQfnR8-3PoGr8HQ. Utils.ts:174:39
00:51:04.179 [2020-01-04T23:51:04.180Z] Debug: The HttpConnection connected successfully. Utils.ts:178:39
00:51:04.180 [2020-01-04T23:51:04.180Z] Debug: Sending handshake request. Utils.ts:178:39
00:51:04.180 [2020-01-04T23:51:04.181Z] Debug: Hub handshake failed with error 'WebSocket is not in the OPEN state' during start(). Stopping HubConnection. Utils.ts:178:39
00:51:04.181 [2020-01-04T23:51:04.181Z] Trace: (WebSockets transport) socket closed. Utils.ts:178:39
00:51:04.181 [2020-01-04T23:51:04.182Z] Debug: HttpConnection.stopConnection(undefined) called while in state Disconnecting. Utils.ts:178:39
00:51:04.182 [2020-01-04T23:51:04.182Z] Error: Connection disconnected with error 'WebSocket is not in the OPEN state'. Utils.ts:168:39
00:51:04.183 [2020-01-04T23:51:04.184Z] Debug: HubConnection.connectionClosed(WebSocket is not in the OPEN state) called while in state Reconnecting. Utils.ts:178:39
00:51:04.183 [2020-01-04T23:51:04.184Z] Information: Reconnect attempt failed because of error 'WebSocket is not in the OPEN state'. Utils.ts:174:39
00:51:04.184 [2020-01-04T23:51:04.185Z] Information: Reconnect attempt number 2 will start in 2000 ms. Utils.ts:174:39
Here is hub method:
public async Task SendMessage(Message message)
{
// Eager loading conversation with matching Id
var chat = _context.Chat
.Include(c => c.PersonA)
.Include(c => c.PersonB)
.FirstOrDefault(m => m.Id == message.ChatId);
/*
* I'm doing a few validations here
*/
// Saving entity to the database
await _context.AddAsync(new Message
{
SenderId = message.SenderId,
ChatId = message.ChatId,
Text = message.Text
});
await _context.SaveChangesAsync();
// Dispatching message to the clients using strongly-typed hub
var usersId = new List<string> { chat.PersonAId, chat.PersonBId };
await Clients
.Users(usersId)
.ReceiveMessage(message);
}
The potential problem could lie in timing, the dispatching can't wait for the EF to execute all operations, because when I just load the conversation It works good, adding more complexity, it breaks down.
I'm working in a hybrid Mobile First app for android, and after I call an adapter the callback function registered never get call. Here is the log, all I can see is that my app is unregistering the push subscriptions.
05-06 11:18:16.429: D/mali_winsys(4021): new_window_surface returns 0x3000
05-06 11:18:16.429: D/ProgressBar(4021): updateDrawableBounds: left = 0
05-06 11:18:16.429: D/ProgressBar(4021): updateDrawableBounds: top = 0
05-06 11:18:16.429: D/ProgressBar(4021): updateDrawableBounds: right = 144
05-06 11:18:16.429: D/ProgressBar(4021): updateDrawableBounds: bottom = 144
05-06 11:18:16.479: D/NONE(4021): Request [/apps/services/api/appname/android/query]
05-06 11:18:16.574: D/HttpPostRequestSender(4021): WLHybridRequestSender.run in WLHybridRequestSender.java:47 :: Sending request https://domain/appproject/apps/services/api/appname/android/query
05-06 11:18:16.574: I/System.out(4021): pool-5-thread-2(ApacheHTTPLog):getSBService() is false
05-06 11:18:16.574: I/System.out(4021): pool-5-thread-2(ApacheHTTPLog):SMARTBONDING_ENABLED is false
05-06 11:18:16.574: I/System.out(4021): pool-5-thread-2(ApacheHTTPLog):Resquest instance of HttpUriRequesttrue
05-06 11:18:16.574: I/System.out(4021): pool-5-thread-2(ApacheHTTPLog):determineRoute Local address : null
05-06 11:18:16.579: I/System.out(4021): pool-5-thread-2(ApacheHTTPLog):Inside DefaultClientConnectionOperator.openConnection()
05-06 11:18:16.579: I/System.out(4021): pool-5-thread-2(ApacheHTTPLog):start to get IP for host domain at time 1430921896581
05-06 11:18:16.579: I/System.out(4021): pool-5-thread-2(ApacheHTTPLog):finish to get IP for host domain at time 1430921896583, result number 1
05-06 11:18:16.579: I/System.out(4021): pool-5-thread-2(ApacheHTTPLog):DefaultClientConnectionOperator.openConnection()InetAddress.getAllByName length:1
05-06 11:18:16.614: D/SoftKeyboardDetect(4021): Ignore this event
05-06 11:18:16.629: I/System.out(4021): pool-5-thread-2(ApacheHTTPLog):DefaultClientConnectionOperator.openConnection() connsock Socket[address=/ip,port=443,localPort=35222]
05-06 11:18:16.714: I/System.out(4021): pool-5-thread-2(ApacheHTTPLog):Servers selected Ip address is : ip
05-06 11:18:17.004: I/System.out(4021): pool-5-thread-2(ApacheHTTPLog):HttpClientParams.isRedirecting(params) : true
05-06 11:18:17.004: I/System.out(4021): pool-5-thread-2(ApacheHTTPLog):this.redirectHandler.isRedirectRequested(response, context) : false
05-06 11:18:17.004: I/System.out(4021): pool-5-thread-2 calls detatch()
05-06 11:18:17.044: D/NONE(4021): Clearing notification subscriptions.
05-06 11:18:17.049: D/NONE(4021): Clearing tag notification subscriptions.
05-06 11:18:17.054: D/NONE(4021): Send new server notification token id.
05-06 11:18:17.059: D/GCMRegistrar(4021): resetting backoff for com.appname
05-06 11:18:17.059: V/GCMRegistrar(4021): Registering app com.appname of senders 15237827500
05-06 11:18:17.059: D/NONE(4021): Updating tag notification subscriptions.
05-06 11:18:17.069: D/CordovaLog(4021): file:///android_asset/www/default/worklight/worklight.js: Line 5688 : No matching configurations found from the server. Defaulting to local configuration
05-06 11:18:17.069: I/chromium(4021): [INFO:CONSOLE(5688)] "No matching configurations found from the server. Defaulting to local configuration", source: file:///android_asset/www/default/worklight/worklight.js (5688)
05-06 11:18:17.074: D/NONE(4021): response [/apps/services/api/appname/android/query] success: /*-secure-
05-06 11:18:17.074: D/NONE(4021): {"statusCode":200,"errors":[],"isSuccessful":true,"Envelope":{"Body":{"Clearing_MobileResponse":{"Clearing_MobileResult":{"schema":{"id":"NewDataSet","element":{"complexType":{"choice":{"element":{"complexType":{"sequence":{"element":[{"name":"PROCESANDO_SOLICITUD","type":"xs:string","minOccurs":"0"},{"name":"ERROR","type":"xs:int","minOccurs":"0"}]}},"name":"TablaInfo"},"maxOccurs":"unbounded","minOccurs":"0"}},"MainDataTable":"TablaInfo","name":"NewDataSet","IsDataSet":"true","UseCurrentLocale":"true"},"msdata":"urn:schemas-microsoft-com:xml-msdata","xs":"http:\/\/www.w3.org\/2001\/XMLSchema","xmlns":""},"diffgram":{"msdata":"urn:schemas-microsoft-com:xml-msdata","DocumentElement":{"TablaInfo":{"id":"TablaInfo1","hasChanges":"inserted","PROCESANDO_SOLICITUD":"OK","ERROR":"0","rowOrder":"0"},"xmlns":""},"diffgr":"urn:schemas-microsoft-com:xml-diffgram-v1"}},"xmlns":"http:\/\/sa-webservices\/"}},"xsd":"http:\/\/www.w3.org\/2001\/XMLSchema","soap":"http:\/\/www.w3.org\/2003\/05\/soap-envelope","xsi":"http:\/\/www.w3.org\/2001\/XMLSchema-instance"},"statusReason":"OK","WL-Authentication-Success":{"wl_anonymousUserRealm":{"userId":"09f4f163-c5ee-40d0-964a-4a15060abe42","attributes":{},"isUserAuthenticated":1,"displayName":"09f4f163-c5ee-40d0-964a-4a15060abe42","deviceId":"09f4f163-c5ee-40d0-964a-4a15060abe42"}},"notificationSubscriptionState":{"tags":["Push.ALL"],"eventSources":[],"token":"APA91bFNWYtZp2DTdK4rMLrIKzvktSp64lFK3__AM-...","credentials":"15237827348"},"responseHeaders":{"X-AspNet-Version":"4.0.30319","Date":"Wed, 06 May 2015 14:18:49 GMT","Content-Length":"1316","Content-Type":"application\/soap+xml; charset=utf-8","Server":"Microsoft-IIS\/6.0","X-Powered-By":"ASP.NET","Cache-Control":"private, max-age=0"},"warnings":[],"responseTime":108,"totalTime":110,"info":[]}*/
05-06 11:18:17.099: E/ViewRootImpl(4021): sendUserActionEvent() mView == null
05-06 11:18:17.154: D/mali_winsys(4021): new_window_surface returns 0x3000
05-06 11:18:17.519: V/GCMBroadcastReceiver(4021): onReceive: com.google.android.c2dm.intent.REGISTRATION
05-06 11:18:17.519: V/GCMBroadcastReceiver(4021): GCM IntentService class: com.appname.GCMIntentService
05-06 11:18:17.519: V/GCMBaseIntentService(4021): Acquiring wakelock
05-06 11:18:17.539: V/GCMBaseIntentService(4021): Intent service name: GCMIntentService-DynamicSenderIds-4
05-06 11:18:17.539: D/GCMBaseIntentService(4021): handleRegistration: registrationId = APA91bFNWYtZp2DTdK4rMLrIKzvktSp64lFK3__AM-..., error = null, unregistered = null
05-06 11:18:17.539: D/GCMRegistrar(4021): resetting backoff for com.appname
05-06 11:18:17.544: V/GCMRegistrar(4021): Saving regId on app version 3
05-06 11:18:17.549: V/GCMBaseIntentService(4021): Releasing wakelock
05-06 11:18:17.549: D/GCMIntentService(4021): GCMIntentService.onRegistered in GCMIntentService.java:81 :: WLGCMIntentService: Registered at the GCM server with registration id APA91bFNWYtZp2DTdK4rMLrIKzvktSp64lFK3__AM-...
05-06 11:18:17.584: D/NONE(4021): onReadyToSubscribe
05-06 11:18:17.594: W/NONE(4021): Event source callback is already registered with alias: scoring
05-06 11:18:18.234: E/ViewRootImpl(4021): sendUserActionEvent() mView == null
05-06 11:18:18.419: D/NONE(4021): cantidad: 1
05-06 11:18:19.089: D/NONE(4021): Piggybacking event transmission
05-06 11:18:19.099: D/NONE(4021): Flush called
05-06 11:18:48.674: V/GCMBroadcastReceiver(4021): onReceive: com.google.android.c2dm.intent.RECEIVE
05-06 11:18:48.674: V/GCMBroadcastReceiver(4021): GCM IntentService class: com.appname.GCMIntentService
05-06 11:18:48.674: V/GCMBaseIntentService(4021): Acquiring wakelock
05-06 11:18:48.684: V/GCMBaseIntentService(4021): Intent service name: GCMIntentService-DynamicSenderIds-5
05-06 11:18:48.699: V/GCMBaseIntentService(4021): Releasing wakelock
05-06 11:18:48.699: D/GCMIntentService(4021): GCMIntentService.onMessage in GCMIntentService.java:107 :: WLGCMIntentService: Received a message from the GCM server
05-06 11:18:48.709: W/GCMIntentService(4021): GCMIntentService.onMessage in GCMIntentService.java:114 :: Unable to update badge while received push notification, becasue failed to parse badge number null, badge must be an integer number.
05-06 11:18:48.714: D/push(4021): Push$1.onReceive in Push.java:91 :: Push: Queuing message for dispatch to javascript
05-06 11:18:48.719: D/push(4021): Push$1.onReceive in Push.java:97 :: Push: App on foreground and init completed. Add message from intent to pending: Message(alert=nueva notificacion, badge=1, sound=null, priority=0, visibility=1, redact=null, payload={"apellido":" ","tipoDoc":"DNI","alias":"scoring","lsmHasta":"","dictamen":"REINTENTO","prodOfrecer":"","nombre":" ","tipoCarga":"N","nroDoc":"33312","rechazo":"Reintente la consulta.","lsmDesde":"","docAPresentar":"","lc":""}, category=null, bridge=true)
05-06 11:18:48.719: D/push(4021): Push.dispatchPending in Push.java:395 :: Dispatching to javascript Message(alert=nueva notificacion, badge=1, sound=null, priority=0, visibility=1, redact=null, payload={"apellido":" ","tipoDoc":"DNI","alias":"scoring","lsmHasta":"","dictamen":"REINTENTO","prodOfrecer":"","nombre":" ","tipoCarga":"N","nroDoc":"33312","rechazo":"Reintente la consulta.","lsmDesde":"","docAPresentar":"","lc":""}, category=null, bridge=true)
05-06 11:23:18.494: D/CordovaActivity(4021): Paused the application!
05-06 11:23:18.494: D/CordovaWebView(4021): Handle the pause
05-06 11:23:18.499: D/WLClient(4021): WLClient$ActivityListener.onActivityPaused in WLClient.java:1293 :: on activity paused com.appname.appname . activity count = 0
05-06 11:23:18.519: D/NONE(4021): Flush called
05-06 11:23:18.544: D/WLClient(4021): WLClient$ActivityListener.onActivitySaveInstanceState in WLClient.java:1305 :: on activity save instance state com.appname.appname
05-06 11:23:18.549: D/WLClient(4021): WLClient$ActivityListener.onActivityStopped in WLClient.java:1317 :: on activity stopped com.appname.appname
I was calling a method in the adapter with the property
securityTest="wl_unprotected"
Removed that solve my problem.
I didn't specify any transport in hubConnection.start(), but I still got the transport failure.
I am using IE 10 and IIS 8.0. Could anyone tell me what's wrong?
The code to connect to SignalR server:
$(document).ready(function () {
var hubConnection = $.hubConnection("http://myserver.com:8031");
var notificationHub = hubConnection.createHubProxy("Notification");
hubConnection.logging = true;
notificationHub.on("calculationResultReceived", function (result) {
addLog("Time elapsed: " + result.timeElapsed + ", finalResult: " + result.finalResult+ ", ID: " + result.jobId);
}
});
hubConnection.start().done(function () {
notificationHub.invoke("Echo")
.done(function (msg) { addLog("Notification hub connection established successfully" + "\n" + msg); })
.fail(function (message) { addLog("Failed to register push channel"); });
}).fail(function (message) {
addLog("The connection cannot be established: " + message)
});
});
The console log of the IE10:
[23:10:06 UTC+0800] SignalR: Client subscribed to hub 'notification'.
[23:10:06 UTC+0800] SignalR: Negotiating with
'http://myserver.com:8031/signalr/negotiate?connectionData=%5B%7B%22name%22%3A%22notification%22%7D%5D&clientProtocol=1.3'.
[23:10:07 UTC+0800] SignalR: This browser doesn't support SSE.
[23:10:07 UTC+0800] SignalR: Binding to iframe's load event.
[23:10:12 UTC+0800] SignalR: foreverFrame timed out when trying to
connect. [23:10:12 UTC+0800] SignalR: Stopping forever frame.
[23:10:12 UTC+0800] SignalR: Opening long polling request to
'http://myserver.com:8031/signalr/connect?transport=longPolling&connectionToken=c39XZZSbiQZDnXbf6vOm8zt8wTQrStyPg8qchxWFevyp9BN2yxslU6YAahRdrsy7W0LOc%2BW5FMfRhQe10o%2B2ihlprs9803heDkD2S1Qo4j8oI1kmUA5fPXoBlcP3Ygrk&connectionData=%5B%7B%22name%22%3A%22notification%22%7D%5D&tid=6'.
[23:10:17 UTC+0800] SignalR: longPolling timed out when trying to
connect. [23:10:17 UTC+0800] SignalR: Aborted xhr request.
[23:10:17 UTC+0800] SignalR: Stopping connection. [23:10:17
UTC+0800] SignalR: Fired ajax abort async = true.
ADD 1
I checked my IIS8 installation, and enabled the WebSocket feature. But still the same error, though the error message changed a bit.
Try to diable browserlink feature in Visual Studio. To disable browserlink click Browser Link dropdown and uncheck Enable Browser Link (Using Browser Link in Visual Studio 2013).
(Source: github.com/SignalR, author: netsrotr)