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.
In dieser Aufgabe ergänzen Sie den in Aufgabe 1 erstellten Dienst durch Attribute, die ein Beibehalten des Zustands Ihres Diensts nach dem erfolgreichen Vorgangsaufruf ermöglichen.
So ergänzen Sie den Dienst durch permanente Dienstattribute:
Öffnen Sie Service1.cs (oder Service1.vb, wenn Sie eine Visual Basic-Projektmappe erstellt haben).
Klicken Sie im Projektmappen-Explorer im Projektknoten SimpleDurableService mit der rechten Maustaste auf den Unterordner Verweise und wählen Sie Hinzufügen Verweis.
Wählen Sie auf der Registerkarte .NET im Dialogfeld Verweis hinzufügen System.WorkflowServices aus, und klicken Sie auf OK.
Fügen Sie die folgende using-Anweisung in der C#-Quelldatei hinzu:
Haben Sie eine Visual Basic-Projektmappe erstellt, klicken Sie mit der rechten Maustaste auf den SimpleDurableService-Projektknoten, und wählen Sie Eigenschaften aus. Klicken Sie auf die Registerkarte Verweise, und aktivieren Sie unter Importierte Namespaces den Namespace System.ServiceModel.Description.
Wenn Sie den Dienst speichern möchten, muss die Service1-Klasse wie im folgenden Beispiel gezeigt mit den DurableServiceAttribute- und SerializableAttribute-Attributen gekennzeichnet werden.
Vom DurableServiceAttribute-Attribut wird angegeben, dass Zustandsinformationen für Ihren WCF-Dienst in einem Persistenzspeicher behalten werden können, wie z. B. einer Datenbank oder einer Datei. Außerdem muss der Diensttyp serialisierbar sein, damit er in den Persistenzspeicher übertragen werden kann.
Ergänzen Sie die Dienstvorgänge wie im folgenden Beispiel veranschaulicht durch das DurableOperationAttribute-Attribut. Von diesem Attribut wird angegeben, dass der Dienstinstanzzustand gespeichert wird, nachdem der Vorgang abgeschlossen wurde.
Die CanCreateInstance- und CompletesInstance-Eigenschaften legen fest, dass die permanente Dienstinstanz nach dem erfolgreichen Abschluss des gekennzeichneten Vorgangs erstellt oder abgeschlossen wird. In diesem Lernprogramm wird das Verhalten der Dienstinstanz bei mehreren Vorgängen durch die ersten und letzten Vorgänge gesteuert.
Vorgänge mit dem auf Standardwerte eingestellten DurableOperationAttribute-Attribut können Statusinformationen nur in einem vorhandenen Dienstinstanzeintrag im persistenten Speicher speichern. Wenn Sie jedoch einen Dienstvertrag erstellen, in dem System.ServiceModel.SessionMode.NotAllowed auf true gesetzt ist, muss für jedes DurableOperationAttribute-Attribut die CanCreateInstance-Eigenschaft auf true festgelegt werden.
Nachdem Sie den Dienst mit den entsprechenden Attributen versehen haben, müssen Sie die Konfigurationsdatei einrichten und auf den gewünschten persistenten Speicher verweisen.
So konfigurieren Sie den permanenten Dienst:
Öffnen Sie App.config.
Ändern Sie die Konfigurationseinstellungen des Endpunkts, um auf eine Kontextbindung zu verweisen, wie z. B. WSHttpContextBinding.
<endpoint address ="" binding="wsHttpContextBinding" contract="SimpleDurableService.IService1" />Kontextbindungen müssen verwendet werden, weil ein DurableOperationContext vom Client zur Identifizierung einer spezifischen Dienstinstanz verwendet wird. Nach dem Aufrufen eines Anforderungs-/Antwortvorgangs und dem Empfang einer Antwort vom Dienst wird der InstanceId-Wert bei jedem folgenden Vorgangsaufruf vom Client verwendet, wodurch der Client der richtigen Dienstinstanz zugeordnet wird. Wurde der Überwachungsmechanismus nicht verwendet, und wird dann eine Dienstinstanz entweder heruntergefahren oder vom Client getrennt, kann der Client die Verbindung zu einer bestimmten Dienstinstanz nicht wiederherstellen.
Fügen Sie dem Verhaltensknoten folgenden untergeordneten Knoten hinzu.
<behaviors> <serviceBehaviors> <behavior name="SimpleDurableService.Service1Behavior"> <!-- To avoid disclosing metadata information, set the following value to false and remove the preceding metadata endpoint before deployment. --> <serviceMetadata httpGetEnabled="True"/> <!-- To receive exception details in faults for debugging purposes, set the following value to true. Set the value to false before deployment to avoid disclosing exception information. --> <serviceDebug includeExceptionDetailInFaults="False" /> <persistenceProvider type="System.ServiceModel.Persistence.SqlPersistenceProviderFactory, System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DurableServiceStore" persistenceOperationTimeout = "00:00:10" lockTimeout="00:01:00" serializeAsText="true"/> </behavior> </serviceBehaviors> </behaviors>PersistenceProviderElement definiert den vom Dienst verwendeten Typ von PersistenceProvider. In diesem Lernprogramm wird SqlPersistenceProviderFactory zum Erstellen einer neuen Instanz des PersistenceProvider-Typs verwendet, der eine Verbindung zu einer SQL-Datenbank herstellt. Immer wenn Vorgang hinzufügen aufgerufen und erfolgreich abgeschlossen wird, wird eine neue Dienstinstanz erstellt. Ihre Zustandsinformationen werden in der SQL-Datenbank gespeichert.
Fügen Sie die Verbindungszeichenfolge für die SQL-Datenbank hinzu, die von der Dienstinstanz für Persistenz verwendet wird.
</system.serviceModel> <connectionStrings> <add name="DurableServiceStore" connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=NetFx35Samples_DurableServiceStore;Integrated Security=SSPI"/> </connectionStrings> </configuration>
Tipp
In diesem Lernprogramm wird dieselbe Datenbank wie für Durable Workflow Services Sample verwendet. Deshalb ist auch die Verbindungszeichenfolge gleich. Um Zugriff auf den permanenten Speicher zu gewähren, führen Sie das Skript Createstores.cmd über One-Time Setup Procedure for the Windows Communication Foundation Samples aus.
In der nächsten Aufgabe erstellen Sie einen Client, von dem auf den permanenten Dienst zugegriffen werden kann.
Siehe auch
Aufgaben
Aufgabe 1: Definieren und Implementieren des permanenten Dienstvertrags
Aufgabe 3: Erstellen eines permanenten Dienstclients
Weitere Ressourcen
Lernprogramm: Erstellen eines permanenten Diensts
Copyright © 2007 Microsoft Corporation. Alle Rechte vorbehalten.