Rozwiązywanie problemów z usługą SignalR
Autor : Patrick Fletcher
Ostrzeżenie
Ta dokumentacja nie dotyczy najnowszej wersji usługi SignalR. Przyjrzyj się ASP.NET Core SignalR.
W tym dokumencie opisano typowe problemy z usługą SignalR.
Wersje oprogramowania używane w tym temacie
- Visual Studio 2013
- .NET 4.5
- SignalR w wersji 2
Poprzednie wersje tego tematu
Aby uzyskać informacje o wcześniejszych wersjach usługi SignalR, zobacz SignalR Starsze wersje.
Pytania i komentarze
Przekaż opinię na temat tego, jak ci się podobał ten samouczek i co możemy ulepszyć w komentarzach w dolnej części strony. Jeśli masz pytania, które nie są bezpośrednio związane z tym samouczkiem, możesz opublikować je na forum ASP.NET SignalR lub StackOverflow.com.
Ten dokument zawiera następujące sekcje.
- Wywoływanie metod między klientem a serwerem w trybie dyskretnym kończy się niepowodzeniem
- Konfigurowanie obiektów WebSocket usług IIS do ping/ponga w celu wykrywania martwego klienta
- Inne problemy z połączeniami
- Błędy kompilacji i po stronie serwera
- Problemy z programem Visual Studio
- Problemy z usługami Internet Information Services
- Problemy z platformą Microsoft Azure
Wywoływanie metod między klientem a serwerem w trybie dyskretnym kończy się niepowodzeniem
W tej sekcji opisano możliwe przyczyny niepowodzenia wywołania metody między klientem a serwerem bez istotnego komunikatu o błędzie. W aplikacji SignalR serwer nie ma informacji o metodach implementujących przez klienta; gdy serwer wywołuje metodę klienta, nazwa metody i dane parametrów są wysyłane do klienta, a metoda jest wykonywana tylko wtedy, gdy istnieje w formacie określonym przez serwer. Jeśli na kliencie nie zostanie znaleziona żadna zgodna metoda, nic się nie stanie i na serwerze nie zostanie zgłoszony żaden komunikat o błędzie.
Aby dokładniej zbadać metody klienta, które nie są wywoływane, można włączyć rejestrowanie przed wywołaniem metody start w centrum, aby zobaczyć, jakie wywołania pochodzą z serwera. Aby włączyć rejestrowanie w aplikacji JavaScript, zobacz Jak włączyć rejestrowanie po stronie klienta (wersja klienta JavaScript). Aby włączyć rejestrowanie w aplikacji klienckiej .NET, zobacz Jak włączyć rejestrowanie po stronie klienta (wersja klienta.NET).
Błędna metoda, niepoprawna sygnatura metody lub nieprawidłowa nazwa centrum
Jeśli nazwa lub sygnatura wywołanej metody nie jest dokładnie zgodna z odpowiednią metodą na kliencie, wywołanie zakończy się niepowodzeniem. Sprawdź, czy nazwa metody wywoływana przez serwer jest zgodna z nazwą metody na kliencie. Ponadto usługa SignalR tworzy serwer proxy koncentratora przy użyciu metod camel-cased, zgodnie z potrzebami w języku JavaScript, więc metoda wywoływana SendMessage
na serwerze proxy klienta będzie wywoływana sendMessage
. Jeśli używasz atrybutu HubName
w kodzie po stronie serwera, sprawdź, czy używana nazwa jest zgodna z nazwą użytą do utworzenia centrum na kliencie. Jeśli nie używasz atrybutu HubName
, sprawdź, czy nazwa centrum w kliencie JavaScript jest wielbłądowa, taka jak chatHub zamiast ChatHub.
Zduplikowana nazwa metody na kliencie
Sprawdź, czy na kliencie nie ma zduplikowanego metody, która różni się tylko wielkością liter. Jeśli aplikacja kliencka ma metodę o nazwie sendMessage
, sprawdź, czy nie ma również wywoływanej SendMessage
metody.
Brak analizatora JSON na kliencie
Usługa SignalR wymaga obecności analizatora JSON w celu serializacji wywołań między serwerem a klientem. Jeśli klient nie ma wbudowanego analizatora JSON (takiego jak Internet Explorer 7), musisz uwzględnić go w aplikacji. Analizator JSON można pobrać tutaj.
Mieszanie składni koncentratora i trwałego połączenia
Usługa SignalR używa dwóch modeli komunikacyjnych: koncentratorów i persistentConnections. Składnia wywoływania tych dwóch modeli komunikacji różni się w kodzie klienta. Jeśli dodano centrum w kodzie serwera, sprawdź, czy cały kod klienta używa odpowiedniej składni centrum.
Kod klienta JavaScript, który tworzy element PersistentConnection w kliencie JavaScript
var myConnection = $.connection('/echo');
Kod klienta JavaScript, który tworzy serwer proxy centrum w kliencie JavaScript
var myHub = $.connection.MyHub;
Kod serwera C#, który mapuje trasę do elementu PersistentConnection
RouteTable.Routes.MapConnection<MyConnection>("my", "/echo");
Kod serwera C#, który mapuje trasę do centrum lub do wielu centrów, jeśli masz wiele aplikacji
App.MapSignalR();
Połączenie rozpoczęte przed dodaniu subskrypcji
Jeśli połączenie centrum zostanie uruchomione przed dodaniu metod, które mogą być wywoływane z serwera proxy, komunikaty nie zostaną odebrane. Następujący kod JavaScript nie uruchomi centrum prawidłowo:
Nieprawidłowy kod klienta JavaScript, który nie zezwala na odbieranie komunikatów usługi Hubs
var chat = $.connection.chatHub;
$.connection.hub.start().done(function () {
chat.client.broadcastMessage = function (name, message) {...};
});
Zamiast tego dodaj subskrypcje metody przed wywołaniem metody Start:
Kod klienta JavaScript, który poprawnie dodaje subskrypcje do centrum
var chat = $.connection.chatHub;
chat.client.broadcastMessage = function (name, message) {...};
$.connection.hub.start().done(function () {
...
});
Brak nazwy metody na serwerze proxy koncentratora
Sprawdź, czy metoda zdefiniowana na serwerze jest subskrybowana na kliencie. Mimo że serwer definiuje metodę, należy ją nadal dodać do serwera proxy klienta. Metody można dodać do serwera proxy klienta w następujący sposób (należy pamiętać, że metoda jest dodawana do client
elementu członkowskiego centrum, a nie bezpośrednio centrum):
Kod klienta JavaScript, który dodaje metody do serwera proxy centrum
// Method added to proxy in JavaScript:
myHubProxy.server.method1 = function (param1, param2) {...};
//Multiple methods added to proxy in JavaScript using jQuery:
$.extend(myHubProxy.server, {
method1: function (param1, param2) {...},
method2: function (param3, param4) {...}
});
Metody koncentratora lub koncentratora nie są deklarowane jako publiczne
Aby być widocznym na kliencie, implementacja centrum i metody muszą być zadeklarowane jako public
.
Uzyskiwanie dostępu do centrum z innej aplikacji
Dostęp do usługi SignalR Hubs można uzyskać tylko za pośrednictwem aplikacji implementujących klientów usługi SignalR. Usługa SignalR nie może współdziałać z innymi bibliotekami komunikacyjnymi (takimi jak usługi internetowe PROTOKOŁU SOAP lub WCF). Jeśli nie ma dostępnego klienta usługi SignalR dla platformy docelowej, nie możesz uzyskać bezpośredniego dostępu do punktu końcowego serwera.
Ręczne serializowanie danych
Usługa SignalR automatycznie użyje kodu JSON do serializacji parametrów metody — nie trzeba tego robić samodzielnie.
Metoda centrum zdalnego nie jest wykonywana na kliencie w funkcji OnDisconnected
To zachowanie jest celowe. Po OnDisconnected
wywołaniu centrum zostało już wprowadzone Disconnected
do stanu, który nie zezwala na wywoływanie dalszych metod centrum.
Kod serwera C#, który poprawnie wykonuje kod w zdarzeniu OnDisconnected
public class MyHub : Hub
{
public override Task OnDisconnected()
{
// Do what you want here
return base.OnDisconnected();
}
}
OnDisconnect nie jest wyzwalany w spójnych godzinach
To zachowanie jest celowe. Gdy użytkownik spróbuje odejść od strony z aktywnym połączeniem usługi SignalR, klient usługi SignalR podejmie próbę powiadomienia serwera o zatrzymaniu połączenia klienta. Jeśli próba uzyskania przez klienta usługi SignalR najlepszego rozwiązania nie powiedzie się z serwerem, serwer usunie połączenie po skonfigurowaniu DisconnectTimeout
później, w którym momencie OnDisconnected
zostanie wyzwolony zdarzenie. Jeśli próba najlepszego wysiłku klienta usługi SignalR zakończy się pomyślnie, OnDisconnected
zdarzenie zostanie natychmiast wyzwolony.
Aby uzyskać informacje na temat ustawiania DisconnectTimeout
ustawienia, zobacz Obsługa zdarzeń okresu istnienia połączenia: DisconnectTimeout.
Osiągnięto limit połączeń
W przypadku korzystania z pełnej wersji usług IIS w systemie operacyjnym klienta, takiego jak Windows 7, nakładany jest limit połączeń 10. W przypadku korzystania z systemu operacyjnego klienta należy użyć IIS Express zamiast tego, aby uniknąć tego limitu.
Połączenie między domenami nie jest poprawnie skonfigurowane
Jeśli połączenie między domenami (połączenie, dla którego adres URL usługi SignalR nie znajduje się w tej samej domenie co strona hostingu), nie jest poprawnie skonfigurowane, połączenie może zakończyć się niepowodzeniem bez komunikatu o błędzie. Aby uzyskać informacje na temat włączania komunikacji między domenami, zobacz Jak ustanowić połączenie między domenami.
Połączenie przy użyciu protokołu NTLM (Active Directory) nie działa w kliencie platformy .NET
Połączenie w aplikacji klienckiej .NET korzystającej z zabezpieczeń domeny może zakończyć się niepowodzeniem, jeśli połączenie nie jest poprawnie skonfigurowane. Aby użyć usługi SignalR w środowisku domeny, ustaw wymaganą właściwość połączenia w następujący sposób:
Kod klienta języka C#, który implementuje poświadczenia połączenia
connection.Credentials = CredentialCache.DefaultCredentials;
Konfigurowanie obiektów WebSocket usług IIS do ping/ponga w celu wykrywania martwego klienta
Serwery SignalR nie wiedzą, czy klient nie jest martwy, czy nie, i polegają na powiadomieniu z bazowego protokołu Websocket w przypadku błędów połączenia, czyli OnClose
wywołania zwrotnego. Jednym z rozwiązań tego problemu jest skonfigurowanie obiektów WebSocket usług IIS w celu wykonania ping/ponga. Dzięki temu połączenie zostanie zamknięte, jeśli zostanie nieoczekiwanie zerwane. Aby uzyskać więcej informacji, zobacz ten wpis stackoverflow.
Inne problemy z połączeniami
W tej sekcji opisano przyczyny i rozwiązania konkretnych objawów lub komunikatów o błędach występujących podczas połączenia.
Błąd "Rozpoczęcie musi być wywoływane, aby można było wysłać dane"
Ten błąd jest często spotykany, jeśli kod odwołuje się do obiektów SignalR przed rozpoczęciem połączenia. Połączenie dla programów obsługi i takich metod wywoła metody zdefiniowane na serwerze należy dodać po zakończeniu połączenia. Należy pamiętać, że wywołanie metody jest Start
asynchroniczne, więc kod po wywołaniu może zostać wykonany przed jego ukończeniem. Najlepszym sposobem dodawania procedur obsługi po całkowitym uruchomieniu połączenia jest umieszczenie ich w funkcji wywołania zwrotnego przekazywanej jako parametr do metody startowej:
Kod klienta JavaScript, który poprawnie dodaje programy obsługi zdarzeń odwołujące się do obiektów signalR
$.connection.hub.start().done(function () {
// Wire up Send button to call NewContosoChatMessage on the server.
$('#newContosoChatMessage').click(function () {
contosoChatHubProxy.server.newContosoChatMessage(
$('#displayname').val(), $('#message').val());
$('#message').val('').focus();
});
Ten błąd będzie również widoczny, jeśli połączenie zostanie zatrzymane, gdy obiekty usługi SignalR są nadal przywoływane.
Błąd "301 Przeniesiono trwale" lub "302 Przeniesiono tymczasowo"
Ten błąd może być widoczny, jeśli projekt zawiera folder o nazwie SignalR, który będzie zakłócać automatycznie utworzony serwer proxy. Aby uniknąć tego błędu, nie używaj folderu o nazwie SignalR
w aplikacji ani wyłączaj automatycznego generowania serwera proxy. Aby uzyskać więcej informacji, zobacz Wygenerowany serwer proxy i co to robi .
Błąd "403 Zabronione" na platformie .NET lub kliencie Silverlight
Ten błąd może wystąpić w środowiskach między domenami, w których komunikacja między domenami nie jest poprawnie włączona. Aby uzyskać informacje na temat włączania komunikacji między domenami, zobacz Jak nawiązać połączenie między domenami. Aby ustanowić połączenie między domenami w kliencie programu Silverlight, zobacz Połączenia między domenami z klientów programu Silverlight.
Błąd "404 Nie znaleziono"
Istnieje kilka przyczyn tego problemu. Sprawdź wszystkie następujące elementy:
Odwołanie do adresu proxy centrum nie zostało poprawnie sformatowane: Ten błąd jest często spotykany, jeśli odwołanie do wygenerowanego adresu serwera proxy centrum nie jest poprawnie sformatowane. Sprawdź, czy odwołanie do adresu koncentratora zostało wykonane prawidłowo. Aby uzyskać szczegółowe informacje, zobacz Jak odwoływać się do dynamicznie wygenerowanego serwera proxy .
Dodawanie tras do aplikacji przed dodaniem trasy koncentratora: Jeśli aplikacja używa innych tras, sprawdź, czy pierwsza dodana trasa jest wywołaniem metody
MapSignalR
.Używanie usług IIS 7 lub 7.5 bez aktualizacji dla adresów URL bez rozszerzenia: Korzystanie z usług IIS 7 lub 7.5 wymaga aktualizacji dla adresów URL bez rozszerzeń, aby serwer mógł zapewnić dostęp do definicji centrum pod adresem
/signalr/hubs
. Aktualizacja można znaleźć tutaj.Pamięć podręczna usług IIS jest nieaktualna lub uszkodzona: Aby sprawdzić, czy zawartość pamięci podręcznej nie jest nieaktualna, wprowadź następujące polecenie w oknie programu PowerShell, aby wyczyścić pamięć podręczną:
net stop w3svc Remove-Item -Path "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\*" -Force -Recurse net start w3svc
"500 Wewnętrzny błąd serwera"
Jest to bardzo ogólny błąd, który może mieć szeroką gamę przyczyn. Szczegóły błędu powinny pojawić się w dzienniku zdarzeń serwera lub można je znaleźć za pośrednictwem debugowania serwera. Bardziej szczegółowe informacje o błędach można uzyskać, włączając szczegółowe błędy na serwerze. Aby uzyskać więcej informacji, zobacz Jak obsługiwać błędy w klasie Hub.
Ten błąd jest również często spotykany, jeśli zapora lub serwer proxy nie jest poprawnie skonfigurowany, powodując ponowne napisanie nagłówków żądania. Rozwiązaniem jest upewnienie się, że port 80 jest włączony w zaporze lub serwerze proxy.
"Nieoczekiwany kod odpowiedzi: 500"
Ten błąd może wystąpić, jeśli wersja programu .NET Framework używana w aplikacji nie jest zgodna z wersją określoną w Web.Config. Rozwiązaniem jest sprawdzenie, czy platforma .NET 4.5 jest używana zarówno w ustawieniach aplikacji, jak i w pliku Web.Config.
Błąd "TypeError: <hubType> jest niezdefiniowany"
Ten błąd spowoduje, że wywołanie metody MapSignalR
nie zostanie wykonane poprawnie. Aby uzyskać więcej informacji, zobacz Jak zarejestrować oprogramowanie pośredniczące usługi SignalR i skonfigurować opcje usługi SignalR .
JsonSerializationException nieobsługiwany przez kod użytkownika
Sprawdź, czy parametry wysyłane do metod nie obejmują typów niesyserowalnych (takich jak dojścia plików lub połączeń bazy danych). Jeśli musisz używać elementów członkowskich w obiekcie po stronie serwera, którego nie chcesz wysyłać do klienta (z powodów zabezpieczeń lub ze względu na serializacji), użyj atrybutu JSONIgnore
.
Błąd "Błąd protokołu: Nieznany transport"
Ten błąd może wystąpić, jeśli klient nie obsługuje transportu używanych przez usługi SignalR. Zobacz Transports and Fallbacks (Transports and Fallbacks), aby uzyskać informacje o tym, które przeglądarki mogą być używane z usługą SignalR.
"Generowanie serwera proxy usługi JavaScript Hub zostało wyłączone".
Ten błąd wystąpi, jeśli DisableJavaScriptProxies
zostanie ustawiony, a także odwołanie do dynamicznie wygenerowanego serwera proxy pod adresem signalr/hubs
. Aby uzyskać więcej informacji na temat ręcznego tworzenia serwera proxy, zobacz Wygenerowany serwer proxy i co to robi.
Błąd "Identyfikator połączenia jest w nieprawidłowym formacie" lub "Tożsamość użytkownika nie może ulec zmianie podczas aktywnego połączenia usługi SignalR"
Ten błąd może być widoczny, jeśli jest używane uwierzytelnianie, a klient jest wylogowany przed zatrzymaniem połączenia. Rozwiązaniem jest zatrzymanie połączenia usługi SignalR przed wylogowaniem klienta.
"Błąd nieuchwycony: SignalR: nie znaleziono zapytania jQuery. Upewnij się, że odwołanie do zapytania jQuery zostało odwołane przed błędem pliku SignalR.js
Klient języka JavaScript usługi SignalR wymaga uruchomienia zapytania jQuery. Sprawdź, czy odwołanie do biblioteki jQuery jest poprawne, czy użyta ścieżka jest prawidłowa, a odwołanie do biblioteki jQuery znajduje się przed odwołaniem do usługi SignalR.
Błąd "Uncaught TypeError: Nie można odczytać właściwości "<property>" niezdefiniowanego"
Ten błąd wynika z nieprawidłowego odwołania do serwera proxy jQuery lub serwera proxy centrów. Sprawdź, czy odwołanie do biblioteki jQuery i serwera proxy centrów jest poprawne, czy użyta ścieżka jest prawidłowa, a odwołanie do zapytania jQuery jest przed odwołaniem do serwera proxy koncentratorów. Domyślne odwołanie do serwera proxy centrów powinno wyglądać następująco:
Kod po stronie klienta HTML, który poprawnie odwołuje się do serwera proxy usługi Hubs
<script src="/signalr/hubs"></script>
Błąd "RuntimeBinderException został nieobsługiwany przez kod użytkownika"
Ten błąd może wystąpić, gdy używane jest nieprawidłowe przeciążenie Hub.On
. Jeśli metoda ma wartość zwracaną, typ zwracany musi być określony jako parametr typu ogólnego:
Metoda zdefiniowana na kliencie (bez wygenerowanego serwera proxy)
MyHub.On<ReturnType>("MethodName", LocalMethod);
Identyfikator połączenia jest niespójny lub przerwy połączeń między ładowaniem strony
To zachowanie jest celowe. Ponieważ obiekt koncentratora jest hostowany w obiekcie strony, centrum jest niszczone po odświeżeniu strony. Aplikacja wielostronicowa musi zachować skojarzenie między użytkownikami i identyfikatorami połączeń, aby były spójne między ładowaniem strony. Identyfikatory połączeń można przechowywać na serwerze w ConcurrentDictionary
obiekcie lub bazie danych.
Błąd "Wartość nie może być równa null"
Metody po stronie serwera z opcjonalnymi parametrami nie są obecnie obsługiwane; jeśli opcjonalny parametr zostanie pominięty, metoda zakończy się niepowodzeniem. Aby uzyskać więcej informacji, zobacz Parametry opcjonalne.
Błąd "Firefox nie może nawiązać połączenia z serwerem pod <adresem>" w firebug
Ten komunikat o błędzie można zobaczyć w firebug, jeśli negocjacje transportu protokołu WebSocket kończą się niepowodzeniem, a inny transport jest używany zamiast tego. To zachowanie jest celowe.
Błąd "Certyfikat zdalny jest nieprawidłowy zgodnie z procedurą weryfikacji" w aplikacji klienckiej platformy .NET
Jeśli serwer wymaga niestandardowych certyfikatów klienta, możesz dodać certyfikat x509certificate do połączenia przed wykonaniem żądania. Dodaj certyfikat do połączenia przy użyciu polecenia Connection.AddClientCertificate
.
Połączenie spada po upływie limitu czasu uwierzytelniania
To zachowanie jest celowe. Nie można modyfikować poświadczeń uwierzytelniania, gdy połączenie jest aktywne; aby odświeżyć poświadczenia, połączenie musi zostać zatrzymane i uruchomione ponownie.
Połączenie onConnected jest wywoływane dwa razy w przypadku korzystania z usługi jQuery Mobile
Funkcja jQuery Mobile initializePage
wymusza ponowne wykonanie skryptów na każdej stronie, co powoduje utworzenie drugiego połączenia. Rozwiązania tego problemu obejmują:
- Dołącz odwołanie do aplikacji jQuery Mobile przed plikiem JavaScript.
initializePage
Wyłącz funkcję, ustawiając wartość$.mobile.autoInitializePage = false
.- Poczekaj na zakończenie inicjowania strony przed rozpoczęciem połączenia.
Komunikaty są opóźnione w aplikacjach Silverlight przy użyciu zdarzeń wysłanych przez serwer
Komunikaty są opóźnione podczas korzystania z zdarzeń wysyłanych przez serwer w programie Silverlight. Aby wymusić użycie długiego sondowania, użyj następującego polecenia podczas uruchamiania połączenia:
connection.Start(new LongPollingTransport());
"Odmowa uprawnień" przy użyciu protokołu Forever Frame
Jest to znany problem opisany tutaj. Ten objaw może być widoczny przy użyciu najnowszej biblioteki JQuery; obejście polega na obniżeniu poziomu aplikacji na JQuery 1.8.2.
"InvalidOperationException: Nieprawidłowe żądanie gniazda internetowego.
Ten błąd może wystąpić, jeśli jest używany protokół WebSocket, ale serwer proxy sieci modyfikuje nagłówki żądań. Rozwiązaniem jest skonfigurowanie serwera proxy w celu zezwolenia na protokół WebSocket na porcie 80.
"Wyjątek: nie można rozpoznać metody nazwy> metody", <gdy klient wywołuje metodę na serwerze
Ten błąd może wynikać z używania typów danych, których nie można odnaleźć w ładunku JSON, takiego jak Array. Obejście polega na użyciu typu danych, który można odnaleźć za pomocą formatu JSON, takiego jak IList. Aby uzyskać więcej informacji, zobacz Klient platformy .NET nie może wywołać metod koncentratora z parametrami tablicy.
Błędy kompilacji i po stronie serwera
Poniższa sekcja zawiera możliwe rozwiązania błędów środowiska uruchomieniowego kompilatora i serwera.
Odwołanie do wystąpienia centrum ma wartość null
Ponieważ wystąpienie centrum jest tworzone dla każdego połączenia, nie można samodzielnie utworzyć wystąpienia centrum w kodzie. Aby wywołać metody w centrum spoza samego centrum, zobacz Jak wywoływać metody klienta i zarządzać grupami spoza klasy Centrum , aby uzyskać odwołanie do kontekstu centrum.
HttpContext.Current.Session ma wartość null
To zachowanie jest celowe. Usługa SignalR nie obsługuje stanu sesji ASP.NET, ponieważ włączenie stanu sesji spowoduje przerwanie komunikacji dwukierunkowej.
Brak odpowiedniej metody zastąpienia
Ten błąd może wystąpić, jeśli używasz kodu ze starszej dokumentacji lub blogów. Sprawdź, czy nie odwołujesz się do nazw metod, które zostały zmienione lub przestarzałe (na przykład OnConnectedAsync
).
HostContextExtensions.WebSocketServerUrl ma wartość null
To zachowanie jest celowe. Ten element członkowski jest przestarzały i nie powinien być używany.
Błąd "Trasa o nazwie 'signalr.hubs' już znajduje się w kolekcji tras"
Ten błąd będzie wyświetlany, jeśli MapSignalR
jest wywoływany dwukrotnie przez aplikację. Niektóre przykładowe aplikacje są wywoływane MapSignalR
bezpośrednio w klasie Startup. Inne tworzą wywołanie w klasie otoki. Upewnij się, że aplikacja nie wykonuje obu tych czynności.
Składnik WebSocket nie jest używany
Jeśli sprawdzono, że serwer i klienci spełniają wymagania protokołu WebSocket (wymienione w dokumencie Obsługiwane platformy ), należy włączyć na serwerze funkcję WebSocket. Instrukcje dotyczące tego działania można znaleźć tutaj.
Połączenie $.connection jest niezdefiniowane
Ten błąd wskazuje, że skrypty na stronie nie są prawidłowo ładowane lub serwer proxy koncentratora jest nieosiągalny lub jest niepoprawnie uzyskiwany. Sprawdź, czy odwołania do skryptu na stronie odpowiadają skryptom załadowanym w projekcie i czy dostęp do /signalr/hubs można uzyskać w przeglądarce, gdy serwer jest uruchomiony.
Nie można odnaleźć co najmniej jednego typu wymaganego do skompilowania wyrażenia dynamicznego
Ten błąd wskazuje, że Microsoft.CSharp
brakuje biblioteki. Dodaj go na karcie Zestawy-Framework>.
Nie można uzyskać dostępu do stanu wywołującego z elementu Clients.Caller w Visual Basic lub w silnie typiowanym centrum; Błąd "Konwersja z typu "Task(Of Object)" na typ "String" jest nieprawidłowa"
Aby uzyskać dostęp do stanu wywołującego w języku Visual Basic lub w silnie typizowanym centrum, użyj właściwości (wprowadzonej Clients.CallerState
w usłudze SignalR 2.1) zamiast Clients.Caller
.
Problemy z programem Visual Studio
W tej sekcji opisano problemy napotkane w programie Visual Studio.
Węzeł Dokumenty skryptu nie jest wyświetlany w Eksplorator rozwiązań
Niektóre z naszych samouczków kierują Cię do węzła "Dokumenty skryptu" w Eksplorator rozwiązań podczas debugowania. Ten węzeł jest generowany przez debuger języka JavaScript i będzie wyświetlany tylko podczas debugowania klientów przeglądarki w programie Internet Explorer; węzeł nie będzie wyświetlany, jeśli są używane przeglądarki Chrome lub Firefox. Debuger języka JavaScript również nie zostanie uruchomiony, jeśli jest uruchomiony inny debuger klienta, taki jak debuger silverlight.
Usługa SignalR nie działa w programie Visual Studio 2008 lub starszym
To zachowanie jest celowe. Usługa SignalR wymaga .NET Framework 4 lub nowszej. Wymaga to opracowania aplikacji SignalR w programie Visual Studio 2010 lub nowszym. Składnik serwera usługi SignalR wymaga .NET Framework 4.5.
Problemy z usługami IIS
Ta sekcja zawiera problemy z usługami Internet Information Services.
Usługa SignalR działa na serwerze programistycznym programu Visual Studio, ale nie w usługach IIS
Usługa SignalR jest obsługiwana w usługach IIS 7.0 i 7.5, ale należy dodać obsługę adresów URL bez rozszerzenia. Aby dodać obsługę bez rozszerzenia adresów URL, zobacz https://support.microsoft.com/kb/980368
Usługa SignalR wymaga zainstalowania ASP.NET na serwerze (ASP.NET nie jest instalowana w usługach IIS domyślnie). Aby zainstalować ASP.NET, zobacz ASP.NET Pliki do pobrania.
Problemy z platformą Microsoft Azure
Ta sekcja zawiera problemy z platformą Microsoft Azure.
FileLoadException podczas hostowania usługi SignalR w roli procesu roboczego platformy Azure
Hostowanie usługi SignalR w roli procesu roboczego platformy Azure może spowodować wyjątek "Nie można załadować pliku lub zestawu "Microsoft.Owin, Wersja=2.0.0.0". Jest to znany problem z pakietem NuGet; Przekierowania powiązań nie są dodawane automatycznie w projektach roli procesu roboczego platformy Azure. Aby rozwiązać ten problem, można ręcznie dodać przekierowania powiązań. Dodaj następujące wiersze do app.config
pliku dla projektu Roli procesu roboczego.
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.2.0" newVersion="2.0.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.2.0" newVersion="2.0.2.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Komunikaty nie są odbierane za pośrednictwem płaszczyzny prac platformy Azure po zmianie nazw tematów
Tematy używane przez zaplecze platformy Azure są utrzymywane wewnętrznie; nie są przeznaczone do konfigurowania przez użytkownika.