Sdílet prostřednictvím


Specifikace chování služby Run-Time

Jakmile navrhnete kontrakt služby (návrh kontraktů služeb) a implementujete kontrakt služby (implementace kontraktů služeb), můžete nakonfigurovat chování operace modulu runtime služby. Toto téma popisuje chování služeb a operací poskytované systémem a popisuje, kde najít další informace o vytváření nových chování. I když se některé chování používá jako atributy, mnoho z nich se používá pomocí konfiguračního souboru aplikace nebo programově. Další informace o konfiguraci aplikace služby naleznete v tématu Konfigurace služeb.

Přehled

Kontrakt definuje vstupy, výstupy, datové typy a možnosti služby tohoto typu. Implementace kontraktu služby vytvoří třídu, která po konfiguraci s vazbou na určité adrese splní kontrakt, který implementuje. Smluvní, závazné a adresní informace jsou všechny známy klientem; bez nich nemůže klient službu využívat.

Specifické operace, jako jsou problémy s vlákny nebo správa instancí, jsou však pro klienty neprůhlené. Po implementaci kontraktu služby můžete pomocí chování nakonfigurovat velký počet charakteristik operací. Chování jsou objekty, které přizpůsobují provozní prostředí WCF (Windows Communication Foundation) buď nastavením jeho vlastností, nebo vložením typu úprav do provozního prostředí. Další informace o úpravě modulu runtime vytvořením uživatelem definovaného chování naleznete v tématu Rozšíření ServiceHost a vrstvy modelu služby.

Atributy System.ServiceModel.ServiceBehaviorAttribute a System.ServiceModel.OperationBehaviorAttribute jsou nejčastěji užitečné chování a odhalují nejběžněji požadované funkce operací. Vzhledem k tomu, že jsou atributy, použijete je na implementaci služby nebo operace. Jiné chování, jako System.ServiceModel.Description.ServiceMetadataBehavior nebo System.ServiceModel.Description.ServiceDebugBehavior, se obvykle používá pomocí konfiguračního souboru aplikace, i když je můžete použít programově.

Toto téma poskytuje přehled atributů ServiceBehaviorAttribute a OperationBehaviorAttribute, popisuje různé úrovně, na kterých může chování fungovat, a nabízí rychlý popis mnoha systémem poskytovaných chování na různých úrovních, které mohou být zajímavé pro vývojáře WCF.

ServiceBehaviorAttribute a OperationBehaviorAttribute

Nejdůležitější atributy jsou ServiceBehaviorAttribute a OperationBehaviorAttribute vlastnosti, které můžete použít ke kontrole:

  • Životnost instancí

  • Podpora souběžnosti a synchronizace

  • Chování konfigurace

  • Chování transakcí

  • Chování serializace

  • Transformace metadat

  • Životnost relace

  • Filtrování adres a zpracování hlaviček

  • Napodobování

  • Pokud chcete tyto atributy použít, označte implementaci služby nebo operace atributem odpovídajícím danému oboru a nastavte vlastnosti. Následující příklad kódu například ukazuje implementaci operace, která používá OperationBehaviorAttribute.Impersonation vlastnost, která vyžaduje, aby volající této operace podporoval zosobnění.

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

Mnoho vlastností vyžaduje další podporu vazby. Například operace, která vyžaduje transakci z klienta, musí být nakonfigurována tak, aby používala vazbu, která podporuje tok transakce.

Well-Known Singleton Services

Pomocí atributů ServiceBehaviorAttribute a OperationBehaviorAttribute můžete řídit určité životnosti, a to jak InstanceContext, tak i objekty služby, které tyto operace implementují.

Například vlastnost ServiceBehaviorAttribute.InstanceContextMode určuje, jak často je InstanceContext vydána, a vlastnosti OperationBehaviorAttribute.ReleaseInstanceMode a ServiceBehaviorAttribute.ReleaseServiceInstanceOnTransactionComplete určují, kdy je objekt služby uvolněn.

Můžete ale také vytvořit objekt služby sami a vytvořit hostitele služby pomocí daného objektu. Chcete-li to provést, musíte také nastavit ServiceBehaviorAttribute.InstanceContextMode vlastnost na Single nebo je vyvolána výjimka při otevření hostitele služby.

Pomocí konstruktoru ServiceHost(Object, Uri[]) vytvořte takovou službu. Poskytuje alternativu k implementaci vlastního System.ServiceModel.Dispatcher.IInstanceContextInitializer objektu, pokud chcete poskytnout konkrétní instanci objektu pro použití službou singleton. Toto přetížení můžete použít, pokud je typ implementace služby obtížné sestavit (například pokud neimplementuje veřejný konstruktor bez parametrů).

Všimněte si, že když je objekt poskytnut tomuto konstruktoru, některé funkce související s chováním instance Wcf (Windows Communication Foundation) fungují odlišně. Například zavolání InstanceContext.ReleaseServiceInstance nemá žádný vliv, pokud je k dispozici dobře známá instance objektu. Podobně se ignoruje jakýkoli jiný mechanismus uvolnění instance. Třída ServiceHost se vždy chová, jako by OperationBehaviorAttribute.ReleaseInstanceMode vlastnost byla nastavena ReleaseInstanceMode.None pro všechny operace.

Jiné chování služby, koncového bodu, kontraktu a operace

Chování služeb, jako například atribut ServiceBehaviorAttribute, funguje napříč celou službou. Pokud například nastavíte vlastnost ServiceBehaviorAttribute.ConcurrencyMode na ConcurrencyMode.Multiple, musíte sami zpracovávat problémy se synchronizací vláken uvnitř každé operace této služby. Chování koncových bodů působí na celém koncovém bodu; mnohé chování koncových bodů poskytovaných systémem je určeno pro funkce klienta. Chování kontraktů funguje na úrovni kontraktu a chování operací mění doručení operace.

Mnoho z těchto chování se implementuje u atributů a používáte je při provádění ServiceBehaviorAttribute a OperationBehaviorAttribute atributů – tím, že je použijete na příslušnou třídu služby nebo implementaci operace. Jiné chování, jako jsou objekty ServiceMetadataBehavior nebo ServiceDebugBehavior, se obvykle uplatňuje pomocí konfiguračního souboru aplikace, i když je lze použít také programově.

Publikování metadat je například nakonfigurováno pomocí objektu ServiceMetadataBehavior . Následující konfigurační soubor aplikace ukazuje nejběžnější využití.

<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>

Následující části popisují řadu nejužitečnějších systémových chování, které můžete použít k úpravě doručení služby nebo klienta za běhu. V referenčním tématu se dozvíte, jak jednotlivé typy používat.

Chování poskytované služby

Následující chování se vztahují na služby.

Chování koncových bodů

Následující chování funguje na koncových bodech. Mnoho z těchto chování se používá v klientských aplikacích.

  • CallbackBehaviorAttribute. Nakonfiguruje implementaci služby zpětného volání v duplexní klientské aplikaci.

  • CallbackDebugBehavior. Povolí ladění služby pro objekt zpětného volání WCF.

  • ClientCredentials. Umožňuje uživateli nakonfigurovat přihlašovací údaje klienta a služby a také nastavení ověřování přihlašovacích údajů služby pro použití v klientovi.

  • ClientViaBehavior. Klienti používají k určení identifikátoru URI (Uniform Resource Identifier), pro který má být vytvořen přenosový kanál.

  • MustUnderstandBehavior. Instruuje WCF, aby vypnulo MustUnderstand zpracování.

  • SynchronousReceiveBehavior. Dává modulu runtime pokyn, aby pro kanály používal synchronní proces příjmu.

  • TransactedBatchingBehavior. Optimalizuje operace příjmu pro přenosy, které podporují transakční příjem.

Chování kontraktů

DeliveryRequirementsAttribute. Určuje požadavky na funkce, které vazby musí poskytovat pro implementaci služby nebo klienta.

Chování operací

Následující chování operací určují serializaci a ovládací prvky transakcí pro operace.

Viz také