Ho lavorato a un progetto per un cliente e mi sono divertito molto a integrare SignalR nel sistema.Le chiamate del client SignalR falliscono per alcune lingue
Tutto sembra funzionare molto bene e il cliente è davvero entusiasta di come il SignalR fornisce un vero feedback in tempo reale per la loro applicazione.
Per la maggior parte tutto è andato bene, tuttavia sono entrato in uno strano problema che semplicemente non riesco a definire.
Tutto grandi opere per le seguenti versioni locali:
- en-US
- it-IT
- si
- nl
Tuttavia nelle lingue semplicemente mai ottenere una richiamata da the hub:
- fr
- de
- es
- en-ZW - che usiamo Inglese Zimbabwe per controllare tutte le stringhe sono tradotte.
posso eseguire il codice a destra fino Clients.Client(ConnectionId).update(Result);
(dove connectionId è l'ID di connessione corretta, e il Risultato è l'oggetto pronto per essere serializzato, con i primi quattro lingue questo va senza problemi e ottengo il mio metodo Javascript con i risultati attesi.
Nelle ultime quattro lingue tuttavia, il metodo è sparato, ma niente passa attraverso l'altro lato. niente. Zip.
Se sostituisco il file Strings.fr.resx con il default Strings.resx quindi il mio sito funziona come previsto, ma poiché il file Strings.en-ZW.resx è identico a Strings.resx (solo ogni stringa è avvolto in [()]) Dubito che sia il problema. Ho anche provato a usare il locale fr con tutte le traduzioni unicode (`, é, â, etc) rimosse, ma questo non ha aiutato.
L'ho esaminato per quasi un giorno intero e non ho trovato nulla che indicasse il problema, e il fatto che it funzioni bene e en-ZW non mi confonde davvero.
Qualcuno ha qualche suggerimento? Metodo
Hub:
public class ClientHub : Hub
{
[...]
protected void UpdateRecords(List<Int32> ChangedValues)
{
using (var database = new DbContext())
{
foreach (Record R in database.Records.Where(Rc => ChangedValues.Contains(Rc.Id))
{
SignalRFormattedRecord Serialized = new SignalRFormattedRecord(Record);
foreach (SavedFilter Filter in SavedFilters.ByRecord(Record))
{
// Next line is always called.
Clients.Client(Filter.ConnectionId).updateRow(Serialized);
}
}
}
}
[...]
}
Javascript:
$.connection.clientHub.updateRow = function(value) {
debugger;
// update code works in all languages except FR, DE, ES and en-ZW.
}
$.connection.start();