मेरे पास एक स्वयं-होस्ट किया गया सिग्नलआर एप्लिकेशन है जो कंसोल ऐप के संदर्भ में चल रहा है। मैं अपने एएसपी.नेट परियोजना से सिग्नलआर। कॉयर असेंबली का संदर्भ देने से रोकने के लिए एक रैपर वर्ग के उपयोग के माध्यम से इसके अंदर हब्स से जुड़ रहा हूं। तो यह मेरे आवेदन के भीतर से एक और सी # वर्ग है जो कनेक्ट किए गए ग्राहकों को संदेशों को प्रसारित करने के लिए ज़िम्मेदार है।सिग्नलआर 2.2 क्लाइंट कोई संदेश नहीं प्राप्त कर रहे हैं
मैं जावास्क्रिप्ट से सीधे PlanHub
विधियों (Register
और Unregister
) कॉल करने में सक्षम हूँ, उन breakpoints हिट मिलता है। हालांकि, जब मैं समूह पंजीकरण के साथ समस्याओं को खत्म करने के लिए हब के बाहर कक्षा से ग्राहक विधियों को कॉल करता हूं (भले ही मैं Clients.All
का उपयोग समूह पंजीकरण के साथ समस्याओं को खत्म करने के लिए करता हूं), ग्राहकों को कभी संदेश नहीं मिलता है। मैं क्या गलत कर रहा हूं?
इस कोड को चलाने पर, मैं सत्यापित कर सकता हूं कि Clients.All.updateStatus(planId, message);
कोड सफलतापूर्वक मारा जा रहा है, लेकिन ग्राहक पर कंसोल के लिए कुछ भी लॉग नहीं है।
यहाँ प्रासंगिक कोड है:
PlanHub.cs
public class PlanHub : Hub
{
private const string GroupPrefix = "PlanGroup_";
public void Register(int companyId)
{
Groups.Add(Context.ConnectionId, $"{GroupPrefix}{companyId}");
}
public void Unregister(int companyId)
{
Groups.Remove(Context.ConnectionId, $"{GroupPrefix}{companyId}");
}
}
PlanPublisher.cs
public class PlanPublisher
{
private readonly static Lazy<PlanPublisher> _instance = new Lazy<PlanPublisher>(() =>
new PlanPublisher(GlobalHost.ConnectionManager.GetHubContext<PlanHub>().Clients));
private IHubConnectionContext<dynamic> Clients { get; set; }
private PlanPublisher(IHubConnectionContext<dynamic> clients)
{
Clients = clients;
}
public static PlanPublisher Instance => _instance.Value;
public void UpdateStatus(int planId, string message)
{
//This code gets hit and no exceptions are thrown, but the clients
//never receive the message. Using Clients.All instead of my
//Groups for testing -- still doesn't work
Clients.All.updateStatus(planId, message);
}
}
(एक और सी # वर्ग के भीतर से) कोड कॉलिंग
PlanPublisher.Instance.UpdateStatus(plan.Id, $"Publishing started for {plan.Name}...");
जावास्क्रिप्ट
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<script src="~/scripts/jquery.signalR-2.2.0.min.js"></script>
<script src="http://localhost:8080/signalr/hubs"></script>
<script>
$(document).ready(function() {
$.connection.hub.url = "http://localhost:8080/signalr";
var planMessagePublisher = $.connection.planHub;
planMessagePublisher.client.updateStatus = function (planId, message) {
console.log('Status: ' + planId + ' - ' + message);
};
$.connection.hub.start().done(function() {
//This works! My PlanHub.Register method gets called successfully
planMessagePublisher.server.register(@Model.CompanyId);
// New connection ID is successfully sent to console
console.log('Now connected, connection ID=' + $.connection.hub.id);
});
});
</script>
जे एस कंसोल डीबगर आउटपुट
jquery.signalR-2.2.0.min.js?v=8588299:8 [06:23:19 GMT-0700 (Pacific Daylight Time)] SignalR: Auto detected cross domain url.
jquery.signalR-2.2.0.min.js?v=8588299:8 [06:23:19 GMT-0700 (Pacific Daylight Time)] SignalR: Client subscribed to hub 'planhub'.
jquery.signalR-2.2.0.min.js?v=8588299:8 [06:23:19 GMT-0700 (Pacific Daylight Time)] SignalR: Negotiating with 'http://localhost:8080/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22planhub%22%7D%5D'.
jquery.signalR-2.2.0.min.js?v=8588299:8 [06:23:19 GMT-0700 (Pacific Daylight Time)] SignalR: webSockets transport starting.
jquery.signalR-2.2.0.min.js?v=8588299:8 [06:23:19 GMT-0700 (Pacific Daylight Time)] SignalR: Connecting to websocket endpoint 'ws://localhost:8080/signalr/connect?transport=webSockets&clientProtocol=1.5&connectionToken=AQAAANCMnd8BFdERjHoAwE%2FCl%2BsBAAAA5D8YUVyzBEG4tTlTaGn0MgAAAAACAAAAAAADZgAAwAAAABAAAABDjF1MaCTzZI0XTM8gC29xAAAAAASAAACgAAAAEAAAAKrk0jv%2FKF4YFzDvNwmSR8IoAAAAacm1d1r7dJpjOtVtCFIFRpugkubyZm1e5Z8OtOFtnhZyEBO1SO4lqhQAAABiG7hBydTiypPh8k2ZYz20ropNxw%3D%3D&connectionData=%5B%7B%22name%22%3A%22planhub%22%7D%5D&tid=6'.
jquery.signalR-2.2.0.min.js?v=8588299:8 [06:23:19 GMT-0700 (Pacific Daylight Time)] SignalR: Websocket opened.
jquery.signalR-2.2.0.min.js?v=8588299:8 [06:23:19 GMT-0700 (Pacific Daylight Time)] SignalR: webSockets transport connected. Initiating start request.
jquery.signalR-2.2.0.min.js?v=8588299:8 [06:23:19 GMT-0700 (Pacific Daylight Time)] SignalR: The start request succeeded. Transitioning to the connected state.
jquery.signalR-2.2.0.min.js?v=8588299:8 [06:23:19 GMT-0700 (Pacific Daylight Time)] SignalR: Now monitoring keep alive with a warning timeout of 13333.333333333332, keep alive timeout of 20000 and disconnecting timeout of 30000
jquery.signalR-2.2.0.min.js?v=8588299:8 [06:23:19 GMT-0700 (Pacific Daylight Time)] SignalR: Invoking planhub.Register
jquery.signalR-2.2.0.min.js?v=8588299:8 [06:23:19 GMT-0700 (Pacific Daylight Time)] SignalR: Invoked planhub.Register
यह सफलतापूर्वक पंजीकृत करता है, लेकिन किसी भी डेटा कभी नहीं मिलती। Clients.All.updateStatus(planId, message);
ब्रेकपॉइंट कई बार मारा गया था लेकिन कंसोल को कोई अतिरिक्त लॉगिंग डेटा कभी नहीं मिला।
संपादित करें: यह सुझाव दिया गया था कि मैं कस्टम निर्भरता रिज़ॉल्वर खेलने में हूं या नहीं। यहां पोस्ट किया गया कोड आपके स्वयं के प्रोजेक्ट में बहुत कम है, जो आप यहां देखते हैं उसके अलावा। कोड जो PlanPublisher.UpdateStatus()
पर कॉल करता है, उसके पास कस्टम निर्भरता रिज़ॉल्वर होता है, लेकिन इससे कोई फर्क नहीं पड़ता क्योंकि यह अपनी असेंबली में अलग है। PlanPublisher.cs
और PlanHub.cs
एक बहुत ही सरल परियोजना में निहित हैं जिसमें केवल SignalR.Core और SignalR.SelfHost के संदर्भ हैं।
आप कम से कम उदाहरण जो आपकी समस्या reproduces प्रदान करने के लिए की जरूरत है। मैंने बस सर्वर और क्लाइंट साइड दोनों पर दिए गए सटीक कोड के साथ चलाने की कोशिश की, और यह बिना किसी समस्या के ठीक हो गया। – Evk
@ स्कॉट, क्या आपने इसे किसी भी तरह हल करने का प्रबंधन किया था? क्योंकि मुझे एक ही समस्या का सामना करना पड़ रहा है। मजाकिया हिस्सा- अगर मैं समूह के लिए प्रकाशित करने का प्रयास करता हूं, तो यह काम करता है, लेकिन सभी के लिए नहीं। दूसरी तरफ, जब मैं इस कार्यक्षमता को आजमाने के लिए एक अलग प्रोजेक्ट बनाता हूं, तो सबकुछ ठीक काम करता है। – Max