Condividi tramite


Sessione di binding personalizzato affidabile

L'esempio ReliableSession illustra come configurare un'associazione personalizzata con vari elementi di codifica di trasporto e messaggi, in particolare abilitando sessioni affidabili. Un'associazione personalizzata è definita da un elenco ordinato di elementi di associazione discreti.

Dettagli di esempio

Le sessioni affidabili offrono funzionalità per la messaggistica e le sessioni affidabili. La messaggistica affidabile ritenta la comunicazione in caso di errore e consente di specificare garanzie di recapito, ad esempio l'arrivo in ordine dei messaggi. Le sessioni mantengono lo stato per i client tra le chiamate. L'esempio implementa le sessioni per mantenere lo stato del client e specifica le garanzie di recapito in ordine. L'esempio si basa sulla guida introduttiva che implementa un servizio calcolatore. Le funzionalità di sessione affidabili sono abilitate e configurate nei file di configurazione dell'applicazione per il client e il servizio.

Annotazioni

La procedura di configurazione e le istruzioni di compilazione per questo esempio si trovano alla fine di questo argomento.

L'ordinamento degli elementi di associazione è importante nella definizione di un'associazione personalizzata, perché ognuno rappresenta un livello nello stack di canali (vedere Associazioni personalizzate).

La configurazione del servizio per l'esempio è definita come illustrato nell'esempio di codice seguente.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service
          name="Microsoft.ServiceModel.Samples.CalculatorService"
          behaviorConfiguration="CalculatorServiceBehavior">
        <!-- This endpoint is exposed at the base address provided by host: http://localhost/servicemodelsamples/service.svc  -->
        <!-- specify customBinding binding and a binding configuration to use -->
        <endpoint address=""
                  binding="customBinding"
                  bindingConfiguration="Binding1"
                  contract="Microsoft.ServiceModel.Samples.ICalculator" />
        <!-- The mex endpoint is exposed at http://localhost/servicemodelsamples/service.svc/mex -->
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>

    <!-- custom binding configuration - configures HTTP transport, reliable sessions -->
    <bindings>
      <customBinding>
        <binding name="Binding1">
          <reliableSession />
          <security authenticationMode="SecureConversation"
                     requireSecurityContextCancellation="true">
          </security>
          <compositeDuplex />
          <oneWay />
          <textMessageEncoding messageVersion="Soap12WSAddressing10" writeEncoding="utf-8" />
          <httpTransport authenticationScheme="Anonymous" bypassProxyOnLocal="false"
                        hostNameComparisonMode="StrongWildcard"
                        proxyAuthenticationScheme="Anonymous" realm=""
                        useDefaultWebProxy="true" />
        </binding>
      </customBinding>
    </bindings>

    <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
    <behaviors>
      <serviceBehaviors>
        <behavior name="CalculatorServiceBehavior">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

  </system.serviceModel>

</configuration>

Quando si esegue in uno scenario tra computer, è necessario modificare l'indirizzo dell'endpoint del client in modo da riflettere il nome host del servizio.

Quando si esegue l'esempio, le richieste e le risposte dell'operazione vengono visualizzate nella finestra della console client. Premere INVIO nella finestra del client per chiudere il client.

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

Per configurare, compilare ed eseguire l'esempio

  1. Installare ASP.NET 4.0 usando il comando seguente:

    %windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
    
  2. Assicurati di aver eseguito la procedura di installazione di One-Time per gli esempi di Windows Communication Foundation.

  3. Per compilare l'edizione C# o Visual Basic .NET della soluzione, seguire le istruzioni in Compilazione degli esempi di Windows Communication Foundation.

  4. Per eseguire l'esempio in una configurazione con computer singolo o incrociato, seguire le istruzioni riportate in Esecuzione degli esempi di Windows Communication Foundation.

    Importante

    Quando si esegue il client in una configurazione tra computer, assicurarsi di sostituire "localhost" sia nell'attributo address dell'elemento <endpoint> che nell'attributo clientBaseAddress di <compositeDuplex> con il nome del computer appropriato, come illustrato nell'esempio seguente.

    <endpoint name = ""
    address="http://service_machine_name/servicemodelsamples/service.svc" />
    <compositeDuplex clientBaseAddress="http://client_machine_name:8000/myClient/" />