我创建了一个SignalR服务器,一个Web客户端和一个用PhoneGap Build构建的移动应用程序。当我使用精简服务器、PhoneGap CLI 或 PhoneGap 桌面应用程序启动 PhoneGap 应用程序时,SignalR 在 Web 客户端和 PhoneGap 应用程序之间完美运行。这包括使用 PhoneGap 移动应用程序连接到 PhoneGap 桌面应用程序。它唯一失败的时间是当我使用 PhoneGap 构建并在设备上安装 APK 时。我对这个错误没有解释。
我已经通过服务器的WEB.CONFIG处理了CORS。它是一个普通 ASP.NET 应用程序,只有一个用于配置 SignalR 的 OWIN 启动文件和一个集线器类。
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE, TOKEN" />
<add name="Access-Control-Allow-Credentials" value="false"/>
</customHeaders>
</httpProtocol>
</system.webServer>
令人沮丧的是,$.connection.hub.start 失败时产生的错误只是"错误:协商请求期间出错">
当"deviceready"事件触发时,我调用 initiateSignalR()
var appConfig = {
'serverUrl': "http://wolf-signalrserver.azurewebsites.net"
}
var initiateSignalR = function(){
if ($.signalR) {
}
var username = prompt("username");
var success = `
<div class ="serverMessage">
<span>--- WELCOME, ${username} ---</span>
</div>
`
$('#chatbox').append(success)
$.connection.hub.logging = true
$.connection.hub.qs = { 'username': username }
$.connection.hub.url = appConfig.serverUrl + "/signalr";
var chatHub = $.connection.chatHub
chatHub.client.broadcastMessage = function (name, message) {
console.log("Data Incoming ---- Name: " + name + " Message: " + message);
var message = `
<div class="row">
<span class="col-sm-2">${name}:</span>
<span class="col-sm-9"> ${message}</span>
</div>
`
$('#chatbox').append(message)
}
$('#messageButton').on('click', function () {
chatHub.server.send(username, $('#messageBox').val())
})
$('#messageForm').on('submit', function (e) {
e.preventDefault();
chatHub.server.send(username, $('#messageBox').val())
})
$.connection.hub.start({ withCredentials: false, jsonp: true })
.done(function () {
console.log("Connected successfully to SignalR");
var success = `
<div class ="serverMessage">
<span>--- Successfully connected to the server ---</span>
</div>
`
$('#chatbox').append(success)
})
.fail(function (err) {
console.log("Unable to connect to SignalR")
alert(err);
})
}
我这里有一个 git 存储库:https://github.com/PhilWolf91/SignalR
我意识到这里有很多问题,但他们都没有详细回答他们如何解决它。 例如:SignalR .Net 客户端失败,设备上出现 500 服务器错误,模拟器工作正常
好的。我是个大白痴。当我清理 Config.Xml 时,我删除了网络权限和默认的白名单插件。
<feature name="http://api.phonegap.com/1.0/network" />
<gap:plugin name="cordova-plugin-whitelist" source="npm" />
此项目的完整功能配置
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.wolf.signalrphonegap" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0">
<name>SignalRPhoneGap</name>
<description>
Hello World sample application that responds to the deviceready event.
</description>
<author email="phillip.wolf91@gmail.com" href="http://phillipwolf91.wordpress.com">
Wolf Software
</author>
<feature name="http://api.phonegap.com/1.0/network" />
<gap:plugin name="cordova-plugin-whitelist" source="npm" />
<content src="index.html" />
<preference name="DisallowOverscroll" value="true" />
<preference name="android-minSdkVersion" value="14" />
<platform name="android">
</platform>
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<platform name="android">
<allow-intent href="market:*" />
</platform>
</widget>
我现在让 SignalR 在设备上安装的服务器、Web 客户端和 PhoneGap 应用程序之间工作