Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Po zaprojektowaniu kontraktu usługi (projektowanie kontraktów usług) i zaimplementowaniu kontraktu usługi (Implementowanie kontraktów usług) można skonfigurować działanie środowiska uruchomieniowego usługi. W tym temacie omówiono zachowania usług i operacji zapewnianych przez system oraz opisano, gdzie znaleźć więcej informacji na temat tworzenia nowych zachowań. Podczas gdy niektóre zachowania są stosowane jako atrybuty, wiele z nich jest stosowana przy użyciu pliku konfiguracji aplikacji lub programowo. Aby uzyskać więcej informacji na temat konfigurowania aplikacji usługi, zobacz Konfigurowanie usług.
Przegląd
Kontrakt definiuje dane wejściowe, dane wyjściowe, typy danych i możliwości usługi tego typu. Implementowanie kontraktu usługi tworzy klasę, która po skonfigurowaniu za pomocą powiązania z adresem spełnia kontrakt, który implementuje. Informacje o umowie, powiązaniu i adresie są znane przez klienta; bez nich klient nie może korzystać z usługi.
Jednak szczegóły operacji, takie jak problemy z wątkami lub zarządzanie wystąpieniami, są niejawne dla klientów. Po zaimplementowaniu kontraktu usługi można skonfigurować dużą liczbę cech operacji przy użyciu zachowań. Zachowania to obiekty, które modyfikują środowisko uruchomieniowe Windows Communication Foundation (WCF) poprzez ustawienie właściwości tego środowiska lub wprowadzenie typu modyfikacji do samego środowiska. Aby uzyskać więcej informacji na temat modyfikowania środowiska uruchomieniowego przez tworzenie zachowań zdefiniowanych przez użytkownika, zobacz Rozszerzanie elementu ServiceHost i warstwy modelu usługi.
Atrybuty System.ServiceModel.ServiceBehaviorAttribute i System.ServiceModel.OperationBehaviorAttribute są najczęściej przydatnymi zachowaniami i uwidaczniają najczęściej żądane funkcje operacji. Ponieważ są to atrybuty, należy je zastosować do implementacji usługi lub operacji. Inne zachowania, takie jak System.ServiceModel.Description.ServiceMetadataBehavior lub System.ServiceModel.Description.ServiceDebugBehavior, są zwykle stosowane przy użyciu pliku konfiguracji aplikacji, chociaż można ich używać programowo.
W tym temacie omówiono atrybuty ServiceBehaviorAttribute i OperationBehaviorAttribute, opisano różne zakresy, w których mogą działać zachowania, oraz podano krótki opis wielu zachowań dostarczanych przez system w różnych zakresach, które mogą zainteresować deweloperów WCF.
ServiceBehaviorAttribute i OperationBehaviorAttribute
Najważniejsze zachowania to atrybuty ServiceBehaviorAttribute i OperationBehaviorAttribute, których można użyć do kontrolowania:
Okresy istnienia wystąpień
Obsługa współbieżności i synchronizacji
Zachowanie konfiguracji
Zachowanie transakcji
Zachowanie serializacji
Przekształcanie metadanych
Okres istnienia sesji
Filtrowanie adresów i przetwarzanie nagłówków
Personifikacja
Aby użyć tych atrybutów, oznacz implementację usługi lub operacji za pomocą atrybutu odpowiedniego dla tego zakresu i ustaw właściwości. Na przykład poniższy przykład kodu przedstawia implementację operacji, która używa właściwości OperationBehaviorAttribute.Impersonation, aby wymagać, że wywołujący tę operację obsługują podszywanie się.
using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Threading;
namespace Microsoft.WCF.Documentation
{
[ServiceContract(
Name="SampleHello",
Namespace="http://microsoft.wcf.documentation"
)]
public interface IHello
{
[OperationContract]
string Hello(string greeting);
}
public class HelloService : IHello
{
public HelloService()
{
Console.WriteLine("Service object created: " + this.GetHashCode().ToString());
}
~HelloService()
{
Console.WriteLine("Service object destroyed: " + this.GetHashCode().ToString());
}
[OperationBehavior(Impersonation=ImpersonationOption.Required)]
public string Hello(string greeting)
{
Console.WriteLine("Called by: " + Thread.CurrentPrincipal.Identity.Name);
Console.WriteLine("IsAuthenticated: " + Thread.CurrentPrincipal.Identity.IsAuthenticated.ToString());
Console.WriteLine("AuthenticationType: " + Thread.CurrentPrincipal.Identity.AuthenticationType.ToString());
Console.WriteLine("Caller sent: " + greeting);
Console.WriteLine("Sending back: Hi, " + Thread.CurrentPrincipal.Identity.Name);
return "Hi, " + Thread.CurrentPrincipal.Identity.Name;
}
}
}
Imports System.ServiceModel
Imports System.Threading
Namespace Microsoft.WCF.Documentation
<ServiceContract(Name:="SampleHello", Namespace:="http://microsoft.wcf.documentation")> _
Public Interface IHello
<OperationContract> _
Function Hello(ByVal greeting As String) As String
End Interface
Public Class HelloService
Implements IHello
Public Sub New()
Console.WriteLine("Service object created: " & Me.GetHashCode().ToString())
End Sub
Protected Overrides Sub Finalize()
Console.WriteLine("Service object destroyed: " & Me.GetHashCode().ToString())
End Sub
<OperationBehavior(Impersonation:=ImpersonationOption.Required)> _
Public Function Hello(ByVal greeting As String) As String Implements IHello.Hello
Console.WriteLine("Called by: " & Thread.CurrentPrincipal.Identity.Name)
Console.WriteLine("IsAuthenticated: " & Thread.CurrentPrincipal.Identity.IsAuthenticated.ToString())
Console.WriteLine("AuthenticationType: " & Thread.CurrentPrincipal.Identity.AuthenticationType.ToString())
Console.WriteLine("Caller sent: " & greeting)
Console.WriteLine("Sending back: Hi, " & Thread.CurrentPrincipal.Identity.Name)
Return "Hi, " & Thread.CurrentPrincipal.Identity.Name
End Function
End Class
End Namespace
Wiele właściwości wymaga dodatkowej obsługi powiązania. Na przykład operacja, która wymaga transakcji od klienta, musi być skonfigurowana tak, aby korzystała z powiązania obsługującego przepływane transakcje.
Dobrze znane usługi singletonu
Można użyć atrybutów ServiceBehaviorAttribute i OperationBehaviorAttribute do kontrolowania określonych cykli życia, zarówno dla InstanceContext, jak i dla obiektów usługi, które implementują operacje.
Na przykład właściwość ServiceBehaviorAttribute.InstanceContextMode określa, jak często InstanceContext jest zwalniana, a właściwości OperationBehaviorAttribute.ReleaseInstanceMode i ServiceBehaviorAttribute.ReleaseServiceInstanceOnTransactionComplete kontrolują, kiedy obiekt usługi jest zwalniany.
Można jednak samodzielnie utworzyć obiekt usługi i utworzyć hosta usługi przy użyciu tego obiektu. Aby to zrobić, należy również ustawić właściwość ServiceBehaviorAttribute.InstanceContextMode na Single, w przeciwnym razie zostanie zgłoszony wyjątek po otwarciu hosta usługi.
Użyj konstruktora ServiceHost(Object, Uri[]) , aby utworzyć taką usługę. Stanowi alternatywę dla implementacji niestandardowej System.ServiceModel.Dispatcher.IInstanceContextInitializer, gdy chcesz udostępnić określone wystąpienie obiektu do użycia przez usługę singleton. Możesz użyć tego przeciążenia, gdy typ implementacji usługi jest trudny do skonstruowania (na przykład, jeśli nie implementuje publicznego konstruktora bez parametrów).
Należy pamiętać, że gdy obiekt jest dostarczany do tego konstruktora, niektóre funkcje związane z zachowaniem instancingu programu Windows Communication Foundation (WCF) działają inaczej. Na przykład wywołanie InstanceContext.ReleaseServiceInstance nie ma wpływu, gdy podano dobrze znane wystąpienie obiektu. Podobnie każdy inny mechanizm wydawania wystąpień jest ignorowany. Klasa ServiceHost zawsze zachowuje się tak, jakby właściwość OperationBehaviorAttribute.ReleaseInstanceMode była ustawiona na ReleaseInstanceMode.None dla wszystkich operacji.
Inne zachowania usługi, punktu końcowego, kontraktu i operacji
Zachowania usługi, takie jak atrybut ServiceBehaviorAttribute, działają w całej usłudze. Na przykład, jeśli ustawisz właściwość ServiceBehaviorAttribute.ConcurrencyMode na ConcurrencyMode.Multiple, musisz samodzielnie obsłużyć problemy z synchronizacją wątków wewnątrz każdej operacji w tej usłudze. Zachowania punktów końcowych działają w obrębie punktu końcowego; wiele zachowań punktów końcowych udostępnianych przez system jest przeznaczonych dla funkcji klienta. Funkcje kontraktu działają na poziomie kontraktu, a funkcje operacji modyfikują realizację operacji.
Wiele z tych zachowań jest implementowanych na atrybutach i używasz ich tak jak atrybutów ServiceBehaviorAttribute i OperationBehaviorAttribute — stosując je do odpowiedniej klasy usługi lub implementacji operacji. Inne zachowania, takie jak ServiceMetadataBehavior obiekty lub ServiceDebugBehavior , są zwykle stosowane przy użyciu pliku konfiguracji aplikacji, chociaż mogą być również używane programowo.
Na przykład publikacja metadanych jest konfigurowana przy użyciu ServiceMetadataBehavior obiektu . Poniższy plik konfiguracji aplikacji przedstawia najbardziej typowe użycie.
<configuration>
<system.serviceModel>
<services>
<service
name="Microsoft.WCF.Documentation.SampleService"
behaviorConfiguration="metadataSupport"
>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/SampleService" />
</baseAddresses>
</host>
<endpoint
address=""
binding="wsHttpBinding"
contract="Microsoft.WCF.Documentation.ISampleService"
/>
<!-- Adds a WS-MetadataExchange endpoint at -->
<!-- "http://localhost:8080/SampleService/mex" -->
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="metadataSupport">
<!-- Enables the IMetadataExchange endpoint in services that -->
<!-- use "metadataSupport" in their behaviorConfiguration attribute. -->
<!-- In addition, the httpGetEnabled and httpGetUrl attributes publish -->
<!-- Service metadata for retrieval by HTTP/GET at the address -->
<!-- "http://localhost:8080/SampleService?wsdl" -->
<serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
W poniższych sekcjach opisano wiele z najbardziej przydatnych zachowań udostępnianych przez system, których można użyć do modyfikowania dostarczania środowiska uruchomieniowego usługi lub klienta. Zapoznaj się z tematem referencyjnym, aby określić, jak używać każdego z nich.
Zachowania serwisowe
Następujące zachowania działają na usługach.
AspNetCompatibilityRequirementsAttribute. Zastosowano do usługi WCF, aby wskazać, czy można uruchomić usługę w trybie zgodności ASP.NET.
ServiceAuthorizationBehavior. Określa sposób, w jaki usługa autoryzuje roszczenia klientów.
ServiceCredentials. Konfiguruje poświadczenia usługi. Użyj tej klasy, aby określić poświadczenia dla usługi, takie jak certyfikat X.509.
ServiceDebugBehavior. Umożliwia debugowanie i funkcje informacji pomocy dla usługi WCF.
ServiceMetadataBehavior. Steruje publikacją metadanych usługi i skojarzonymi informacjami.
ServiceSecurityAuditBehavior. Określa zachowanie audytu zdarzeń zabezpieczeń.
ServiceThrottlingBehavior. Konfiguruje ustawienia przepływności środowiska uruchomieniowego, które umożliwiają dostosowywanie wydajności usługi.
Zachowania punktów końcowych
Następujące zachowania działają w punktach końcowych. Wiele z tych zachowań jest używanych w aplikacjach klienckich.
CallbackBehaviorAttribute. Konfiguruje implementację usługi wywołania zwrotnego w aplikacji klienckiej dwukierunkowej.
CallbackDebugBehavior. Włącza debugowanie usługi dla obiektu wywołania zwrotnego WCF.
ClientCredentials. Umożliwia użytkownikowi skonfigurowanie poświadczeń klienta i usługi oraz ustawień uwierzytelniania poświadczeń usługi do użycia na kliencie.
ClientViaBehavior. Używany przez klientów do określania identyfikatora URI ( Uniform Resource Identifier), dla którego ma zostać utworzony kanał transportu.
MustUnderstandBehavior. Nakazuje programowi WCF wyłączenie przetwarzania
MustUnderstand.SynchronousReceiveBehavior. Instruuje środowisko uruchomieniowe, aby używało synchronicznego procesu odbierania dla kanałów.
TransactedBatchingBehavior. Optymalizuje operacje odbierania dla transportów, które obsługują odbieranie transakcyjne.
Zachowania kontraktu
DeliveryRequirementsAttribute. Określa wymagania dotyczące funkcji, które powiązania muszą dostarczyć do usługi lub implementacji klienta.
Zachowania systemu
Następujące specyfikacje operacji określają serializację i kontrolę transakcji w operacjach.
DataContractSerializerOperationBehavior. Reprezentuje zachowanie środowiska uruchomieniowego obiektu System.Runtime.Serialization.DataContractSerializer.
XmlSerializerOperationBehavior. Steruje zachowaniem środowiska uruchomieniowego obiektu
XmlSerializeri kojarzy je z operacją.TransactionFlowAttribute. Określa poziom, na którym operacja usługi akceptuje nagłówek transakcji.