これは私の頭の中の詐欺師になりつつあります。SignalRはphonegapアプリでしか作業していません。
私はSignalRを使用しており、AzureでホストされているMVCアプリケーションを持っています。私は、これは、サーバー上の
window.connection = $.hubConnection('https://giveabuck.azurewebsites.net', { qs: "access_token=" + sessionStorage.getItem("accessToken") });
$.signalR.ajaxDefaults.headers = { Authorization: "Bearer " + sessionStorage.getItem("accessToken") };
window.proxy = connection.createHubProxy('signalRHub');
proxy.on("relaythis", function (callOut) { alert(callOut) });
proxy.on("joinedSession", function (data) { alert(data)});
connection.logging = true;
connection.start({transport: 'longPolling'});
をJS持つクライアント上
、この
[Authorize]
public class SignalRHub : Hub
{
private readonly Broadcaster _Broadcaster;
public SignalRHub()
: this(Broadcaster.Instance) { }
public SignalRHub(Broadcaster broadcaster)
{
_Broadcaster = broadcaster;
}
public override Task OnConnected()
{
this.connectedCallback(this.Context.User.Identity.Name);
return base.OnConnected();
}
public void relayThis(string userName, string message)
{
Clients.User(userName).relaythis(message);
}
public void connectedCallback(string connectedClient){
Clients.All.joinedSession(connectedClient + " has joined!");
}
}
PhoneGapのアプリは、私がの静的なバージョンを保持1つの構成の違いで同じクライアント側のスクリプトを持っています生成されたhub.jsは自動生成できません。
問題は、relayThis()を呼び出すとき、すなわちproxy.invoke( "relayThis"、 "[email protected]"、 "Hello")を呼び出すとき、PhoneGapのバージョンが指定されたユーザ名に届かないことです。しかし、私が同じことをして、ユーザーがホストされているWebサイトにいる場合は、メッセージが届きます。 さらに、signalrがアプリでうまく動作していないわけではありません。アプリケーションが接続を開始すると、「[email protected]」が参加したというメッセージが表示されます。 PhoneGapのアプリ上でログを表示
は「relaythis」のために「joinedSessionが」と呼ばれる活動が、全く活性を示しました。
私が考えることができるベストは、何らかの理由でPhoneGapのユーザーがハブクライアントに追加されていないが、私はそれを主張する方法を見つけるためには至っていないということです。
また、私はOAuthを認可に使用していますが、私が言及したように問題を引き起こしているとは思わないので、PhoneGapアプリはjoinedSessionを受け取り、独自のリクエストを行うことができます。