Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Von Mikael Mengistu
Der Java-Client unterstützt die Verbindung mit einem ASP.NET Core-SignalR-Server über Java-Code, einschließlich Android-Apps. Wie der JavaScript-Client und .NET-Client ermöglicht Ihnen der Java-Client das Empfangen und Senden von Nachrichten an einen Hub in Echtzeit. Der Java-Client ist in ASP.NET Core 2.2 oder höher verfügbar.
Das Beispiel einer Java-Konsolen-App, auf die in diesem Artikel verwiesen wird, verwendet den SignalR-Java-Client.
Anzeigen oder Herunterladen von Beispielcode (Vorgehensweise zum Herunterladen)
Installieren des SignalR-Java-Clientpakets
Die signalr-7.0.0 JAR-Datei ermöglicht Clients das Herstellen einer Verbindung mit SignalR Hubs. Die neueste Versionsnummer der JAR-Datei finden Sie in den Maven-Suchergebnissen.
Wenn Sie Gradle verwenden, fügen Sie in Ihrer Datei dependencies
dem Abschnitt die folgende Zeile hinzu:
implementation 'com.microsoft.signalr:signalr:7.0.0'
Wenn Sie Maven verwenden, fügen Sie Ihrer Datei <dependencies>
innerhalb des Elements pom.xml
die folgenden Zeilen hinzu:
<dependency>
<groupId>com.microsoft.signalr</groupId>
<artifactId>signalr</artifactId>
<version>1.0.0</version>
</dependency>
Herstellen einer Verbindung mit einem Hub
Zum Einrichten von HubConnection
muss HubConnectionBuilder
verwendet werden. Hub-URL und Protokollebene können beim Aufbau einer Verbindung konfiguriert werden. Konfigurieren Sie alle erforderlichen Optionen, indem Sie eine der HubConnectionBuilder
-Methoden vor build
aufrufen. Starten Sie die Verbindung mit start
.
HubConnection hubConnection = HubConnectionBuilder.create(input)
.build();
Aufrufen von Hubmethoden auf dem Client
Ein Aufruf von send
ruft eine Hubmethode auf. Übergeben Sie den Namen der Hubmethode und in der Hubmethode definierte Argumente an send
.
hubConnection.send("Send", input);
Hinweis
Das Aufrufen von Hubmethoden durch einen Client wird nur bei Verwendung von Azure SignalR Service im Modus Default unterstützt. Weitere Informationen finden Sie unter Häufig gestellte Fragen (Azure-Signalr GitHub-Repository).
Aufrufen von Clientmethoden auf dem Hub
Verwenden Sie hubConnection.on
, um Methoden auf dem Client zu definieren, die der Hub aufrufen kann. Definieren Sie die Methoden nach dem Aufbauen, aber vor dem Starten der Verbindung.
hubConnection.on("Send", (message) -> {
System.out.println("New Message: " + message);
}, String.class);
Hinzufügen der Protokollierung
Der Java-Client von SignalR verwendet für die Protokollierung die Bibliothek SLF4J. Es handelt sich um eine allgemeine Protokollierungs-API, mit der Benutzer der Bibliothek ihre eigene spezifische Protokollierungsimplementierung wählen können, indem sie eine bestimmte Protokollierungsabhängigkeit einbinden. Der folgende Codeschnipsel zeigt die Verwendung von java.util.logging
mit dem SignalR-Java-Client.
implementation 'org.slf4j:slf4j-jdk14:1.7.25'
Wenn Sie die Protokollierung in Ihren Abhängigkeiten nicht konfigurieren, lädt SLF4J eine standardmäßige nicht vorgangsspezifische Protokollierung mit der folgenden Warnmeldung:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Diese kann gefahrlos ignoriert werden.
Hinweise zur Android-Entwicklung
Im Hinblick auf Kompatibilität mit dem Android SDK für die SignalR-Clientfeatures sollten Sie die folgenden Punkte beim Angeben Ihrer Android SDK-Zielversion berücksichtigen:
- Der SignalR Java-Client wird auf Android-API-Ebene 16 oder höher ausgeführt.
- Für die Verbindung über den Azure-Dienst SignalR ist android API Level 20 oder höher erforderlich, da der Azure-Dienst SignalR TLS 1.2 erfordert und SHA-1-basierte Verschlüsselungssammlungen nicht unterstützt. Für Android wurde Unterstützung für SHA-256-Verschlüsselungssammlungen (und höher) auf API-Ebene 20 hinzugefügt.
Konfigurieren der Bearertokenauthentifizierung
Im SignalR-Java-Client können Sie ein Bearertoken für die Authentifizierung konfigurieren, indem Sie httpHubConnectionBuilder eine „Zugriffstokenfactory“ bereitstellen. Verwenden Sie withAccessTokenFactory, um eine RxJavaSingle<String> bereitzustellen. Mit einem Aufruf von Single.defer können Sie Logik schreiben, um Zugriffstoken für Ihren Client zu erstellen.
HubConnection hubConnection = HubConnectionBuilder.create("YOUR HUB URL HERE")
.withAccessTokenProvider(Single.defer(() -> {
// Your logic here.
return Single.just("An Access Token");
})).build();
Übergeben von Klasseninformationen in Java
Beim Aufrufen der Methoden on
, invoke
oder stream
von HubConnection
im Java-Client müssen die Benutzer ein Type
-Objekt anstelle eines Class<?>
-Objekts übergeben, um jedes an die Methode übergebene generische Object
zu beschreiben.
Type
kann mithilfe der bereitgestellten TypeReference
-Klasse abgerufen werden. Bei Verwendung einer benutzerdefinierten generischen Klasse mit dem Namen Foo<T>
ruft der folgende Code beispielsweise Type
ab:
Type fooType = new TypeReference<Foo<String>>() { }).getType();
Für Nicht-Generics, z. B. Primitive oder andere nicht parametrisierte Typen wie String
, können Sie einfach die integrierte .class
verwenden.
Wenn Sie eine dieser Methoden mit einem oder mehreren Objekttypen aufrufen, verwenden Sie beim Aufrufen der Methode die Generics-Syntax. Wenn Sie beispielsweise einen on
-Handler für eine Methode namens func
registrieren, die als Argumente eine Zeichenfolge und ein Foo<String>
-Objekt akzeptiert, legen Sie mit folgendem Code eine Aktion zum Ausgeben der Argumente fest:
hubConnection.<String, Foo<String>>on("func", (param1, param2) ->{
System.out.println(param1);
System.out.println(param2);
}, String.class, fooType);
Diese Konvention ist notwendig, weil wir mit der Object.getClass
-Methode aufgrund der Typlöschung in Java keine vollständigen Informationen zu komplexen Typen abrufen können. Beispielsweise gibt der Aufruf von getClass
für ArrayList<String>
nicht Class<ArrayList<String>>
, sondern Class<ArrayList>
zurück, was dem Deserialisierer nicht genügend Informationen liefert, um eine eingehende Nachricht ordnungsgemäß zu deserialisieren. Dasselbe gilt für benutzerdefinierte Objekte.
Bekannte Einschränkungen
- Transportfallback und Server Sent Events-Transport werden nicht unterstützt.
- Transportfallback und Server Sent Events-Transport werden nicht unterstützt.
- Nur das JSON-Protokoll wird unterstützt.
- Nur das JSON-Protokoll wird unterstützt.
- Nur der WebSockets-Transport wird unterstützt.
- Streaming wird noch nicht unterstützt.