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.
Zusätzlich zum Starten einer App auf einem Remotegerät mithilfe eines URI können Sie auch App-Dienste auf Remotegeräten ausführen und mit ihnen kommunizieren. Jedes Windows-basierte Gerät kann entweder als Client- oder Hostgerät verwendet werden. Dadurch erhalten Sie eine nahezu unbegrenzte Anzahl von Möglichkeiten, mit verbundenen Geräten zu interagieren, ohne eine App in den Vordergrund zu bringen.
Einrichten des App-Diensts auf dem Hostgerät
Um einen App-Dienst auf einem Remotegerät auszuführen, müssen Sie bereits einen Anbieter dieses App-Diensts auf diesem Gerät installiert haben. In diesem Handbuch wird die CSharp-Version des App-Dienstbeispiels Zufallszahlengenerator verwendet, das im Windows-Universal-Beispiel-Repository verfügbar ist. Anweisungen zum Schreiben Ihres eigenen App-Diensts finden Sie unter Erstellen und Nutzen eines App-Diensts.
Egal, ob Sie einen bereits erstellten App-Dienst verwenden oder einen eigenen Dienst schreiben, müssen Sie einige Änderungen vornehmen, um den Dienst mit entfernten Systemen kompatibel zu machen. Wechseln Sie in Visual Studio zum Projekt des App-Dienstanbieters (im Beispiel "AppServicesProvider" genannt), und wählen Sie die Datei "Package.appxmanifest " aus. Klicken Sie mit der rechten Maustaste und wählen Sie Code anzeigen aus, um den gesamten Inhalt der Datei anzuzeigen. Erstellen Sie ein Extensions--Element innerhalb des Hauptelements Application (oder suchen Sie es, wenn es bereits vorhanden ist). Erstellen Sie dann eine Erweiterung, um das Projekt als App-Dienst zu definieren und das übergeordnete Projekt zu referenzieren.
...
<Extensions>
<uap:Extension Category="windows.appService" EntryPoint="RandomNumberService.RandomNumberGeneratorTask">
<uap3:AppService Name="com.microsoft.randomnumbergenerator"/>
</uap:Extension>
</Extensions>
...
Fügen Sie neben dem AppService--Element das Attribut SupportsRemoteSystems hinzu:
...
<uap3:AppService Name="com.microsoft.randomnumbergenerator" SupportsRemoteSystems="true"/>
...
Um Elemente in diesem uap3-Namespace zu verwenden, müssen Sie die Namespacedefinition oben in der Manifestdatei hinzufügen, wenn sie noch nicht vorhanden ist.
<?xml version="1.0" encoding="utf-8"?>
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3">
...
</Package>
Erstellen Sie dann Ihr App-Dienstanbieterprojekt, und stellen Sie es auf den Hostgeräten bereit.
Richten Sie den App-Dienst vom Clientgerät aus.
Das Gerät, von dem der Remote-App-Dienst aufgerufen werden soll, benötigt eine App mit Remotesystemfunktionen. Dies kann in derselben App hinzugefügt werden, die den App-Dienst auf dem Hostgerät bereitstellt (in diesem Fall würden Sie dieselbe App auf beiden Geräten installieren) oder in einer völlig anderen App implementiert.
Die folgenden Anweisungen zu in
using Windows.ApplicationModel.AppService;
using Windows.System.RemoteSystems;
Sie müssen zunächst ein AppServiceConnection-Objekt instanziieren, genau so, als ob Sie einen App-Dienst lokal aufrufen würden. Dieser Prozess wird in der Erstellung und Nutzung eines App-Diensts ausführlicher behandelt. In diesem Beispiel ist der App-Dienst, der als Ziel verwendet werden soll, der Dienst des Zufallszahlengenerators.
Hinweis
Es wird davon ausgegangen, dass bereits ein RemoteSystem--Objekt innerhalb des Codes abgerufen wurde, der die folgende Methode aufrufen würde. Anweisungen zum Einrichten finden Sie unter Starten einer Remote-App.
// This method returns an open connection to a particular app service on a remote system.
// param "remotesys" is a RemoteSystem object representing the device to connect to.
private async void openRemoteConnectionAsync(RemoteSystem remotesys)
{
// Set up a new app service connection. The app service name and package family name that
// are used here correspond to the AppServices UWP sample.
AppServiceConnection connection = new AppServiceConnection
{
AppServiceName = "com.microsoft.randomnumbergenerator",
PackageFamilyName = "Microsoft.SDKSamples.AppServicesProvider.CS_8wekyb3d8bbwe"
};
Als Nächstes wird ein -RemoteSystemConnectionRequest-Objekt für das vorgesehene Remotegerät erstellt. Anschließend wird die AppServiceConnection zu diesem Gerät geöffnet. Beachten Sie, dass im folgenden Beispiel die Fehlerbehandlung und -berichterstellung aus Platzgründen erheblich vereinfacht wird.
// a valid RemoteSystem object is needed before going any further
if (remotesys == null)
{
return;
}
// Create a remote system connection request for the given remote device
RemoteSystemConnectionRequest connectionRequest = new RemoteSystemConnectionRequest(remotesys);
// "open" the AppServiceConnection using the remote request
AppServiceConnectionStatus status = await connection.OpenRemoteAsync(connectionRequest);
// only continue if the connection opened successfully
if (status != AppServiceConnectionStatus.Success)
{
return;
}
Zu diesem Zeitpunkt sollten Sie über eine offene Verbindung mit einem App-Dienst auf einem Remotecomputer verfügen.
Dienstspezifische Exchange-Nachrichten über die Remoteverbindung austauschen
Von hier aus können Sie Nachrichten in Form von ValueSet- Objekten an den Dienst senden und empfangen (weitere Informationen finden Sie unter Erstellen und Nutzen eines App-Diensts). Der Generatordienst für Zufallszahlen verwendet zwei ganze Zahlen mit den Schlüsseln "minvalue" und "maxvalue" als Eingaben, wählt zufällig eine ganze Zahl innerhalb dieses Bereichs aus und gibt sie an den aufrufenden Prozess mit dem Schlüssel "Result"zurück.
// create the command input
ValueSet inputs = new ValueSet();
// min_value and max_value vars are obtained somewhere else in the program
inputs.Add("minvalue", min_value);
inputs.Add("maxvalue", max_value);
// send input and receive output in a variable
AppServiceResponse response = await connection.SendMessageAsync(inputs);
string result = "";
// check that the service successfully received and processed the message
if (response.Status == AppServiceResponseStatus.Success)
{
// Get the data that the service returned:
result = response.Message["Result"] as string;
}
}
Jetzt haben Sie eine Verbindung mit einem App-Dienst auf einem Zielhostgerät hergestellt, einen Vorgang auf diesem Gerät ausgeführt und Daten auf Ihr Clientgerät als Antwort empfangen.
Zugehörige Themen
Übersicht über verbundene Apps und Geräte (Project Rome)
Starten einer Remote-App
Erstellen und Nutzen eines App-Diensts
API-Referenz für Remotesysteme
Beispiel für Remote-Systeme