ServiceBehaviorAttribute.InstanceContextMode Özellik
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Yeni hizmet nesnelerinin ne zaman oluşturulduğunu gösteren değeri alır veya ayarlar.
public:
property System::ServiceModel::InstanceContextMode InstanceContextMode { System::ServiceModel::InstanceContextMode get(); void set(System::ServiceModel::InstanceContextMode value); };
public System.ServiceModel.InstanceContextMode InstanceContextMode { get; set; }
member this.InstanceContextMode : System.ServiceModel.InstanceContextMode with get, set
Public Property InstanceContextMode As InstanceContextMode
Özellik Değeri
Değerlerden InstanceContextMode biri; varsayılan değerdir PerSession.
Özel durumlar
Değer değerlerden InstanceContextMode biri değildir.
Örnekler
Aşağıdaki kod örneği özellikleri gösterir ServiceBehaviorAttribute . sınıfı, BehaviorService
aşağıdakileri belirtmek için özniteliğini ServiceBehaviorAttribute kullanır:
Uygulama yöntemleri kullanıcı arabirimi iş parçacığında çağrılır.
Her oturum için bir hizmet nesnesi vardır.
Hizmet tek iş parçacıklıdır ve yeniden gelen çağrıları desteklemez.
Ayrıca, işlem düzeyinde değerler yöntemin OperationBehaviorAttributeTxWork
akışlı işlemlere otomatik olarak listelendiğini veya işi yapmak için yeni bir işlem oluşturduğunu ve işlenmeyen bir özel durum oluşmazsa işlemin otomatik olarak işlendiğini gösterir.
using System;
using System.ServiceModel;
using System.Transactions;
namespace Microsoft.WCF.Documentation
{
[ServiceContract(
Namespace="http://microsoft.wcf.documentation",
SessionMode=SessionMode.Required
)]
public interface IBehaviorService
{
[OperationContract]
string TxWork(string message);
}
// Note: To use the TransactionIsolationLevel property, you
// must add a reference to the System.Transactions.dll assembly.
/* The following service implementation:
* -- Processes messages on one thread at a time
* -- Creates one service object per session
* -- Releases the service object when the transaction commits
*/
[ServiceBehavior(
ConcurrencyMode=ConcurrencyMode.Single,
InstanceContextMode=InstanceContextMode.PerSession,
ReleaseServiceInstanceOnTransactionComplete=true
)]
public class BehaviorService : IBehaviorService, IDisposable
{
Guid myID;
public BehaviorService()
{
myID = Guid.NewGuid();
Console.WriteLine(
"Object "
+ myID.ToString()
+ " created.");
}
/*
* The following operation-level behaviors are specified:
* -- The executing transaction is committed when
* the operation completes without an
* unhandled exception
* -- Always executes under a flowed transaction.
*/
[OperationBehavior(
TransactionAutoComplete = true,
TransactionScopeRequired = true
)]
[TransactionFlow(TransactionFlowOption.Mandatory)]
public string TxWork(string message)
{
// Do some transactable work.
Console.WriteLine("TxWork called with: " + message);
// Display transaction information.
TransactionInformation info = Transaction.Current.TransactionInformation;
Console.WriteLine("The distributed tx ID: {0}.", info.DistributedIdentifier);
Console.WriteLine("The tx status: {0}.", info.Status);
return String.Format("Hello. This was object {0}.",myID.ToString()) ;
}
public void Dispose()
{
Console.WriteLine(
"Service "
+ myID.ToString()
+ " is being recycled."
);
}
}
}
Imports System.ServiceModel
Imports System.Transactions
Namespace Microsoft.WCF.Documentation
<ServiceContract(Namespace:="http://microsoft.wcf.documentation", SessionMode:=SessionMode.Required)> _
Public Interface IBehaviorService
<OperationContract> _
Function TxWork(ByVal message As String) As String
End Interface
' Note: To use the TransactionIsolationLevel property, you
' must add a reference to the System.Transactions.dll assembly.
' The following service implementation:
' * -- Processes messages on one thread at a time
' * -- Creates one service object per session
' * -- Releases the service object when the transaction commits
'
<ServiceBehavior(ConcurrencyMode:=ConcurrencyMode.Single, InstanceContextMode:=InstanceContextMode.PerSession, _
ReleaseServiceInstanceOnTransactionComplete:=True)> _
Public Class BehaviorService
Implements IBehaviorService, IDisposable
Private myID As Guid
Public Sub New()
myID = Guid.NewGuid()
Console.WriteLine("Object " & myID.ToString() & " created.")
End Sub
'
' * The following operation-level behaviors are specified:
' * -- The executing transaction is committed when
' * the operation completes without an
' * unhandled exception
' * -- Always executes under a flowed transaction.
'
<OperationBehavior(TransactionAutoComplete:=True, TransactionScopeRequired:=True), TransactionFlow(TransactionFlowOption.Mandatory)> _
Public Function TxWork(ByVal message As String) As String Implements IBehaviorService.TxWork
' Do some transactable work.
Console.WriteLine("TxWork called with: " & message)
' Display transaction information.
Dim info As TransactionInformation = Transaction.Current.TransactionInformation
Console.WriteLine("The distributed tx ID: {0}.", info.DistributedIdentifier)
Console.WriteLine("The tx status: {0}.", info.Status)
Return String.Format("Hello. This was object {0}.", myID.ToString())
End Function
Public Sub Dispose() Implements IDisposable.Dispose
Console.WriteLine("Service " & myID.ToString() & " is being recycled.")
End Sub
End Class
End Namespace
Aşağıdaki kod örneğinin düzgün yürütülmesi için temel bağlamanın akışlı işlemleri desteklemesi gerekir. kullanarak akışlı işlemleri WSHttpBindingdesteklemek için örneğin, özelliğini true
kodda veya uygulama yapılandırma dosyasında olarak ayarlayınTransactionFlow. Aşağıdaki kod örneği, önceki örneğin yapılandırma dosyasını gösterir.
<configuration>
<system.serviceModel>
<services>
<service
name="Microsoft.WCF.Documentation.BehaviorService"
behaviorConfiguration="metadataAndDebugEnabled"
>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/SampleService"/>
</baseAddresses>
</host>
<!--
Note:
This example code uses the WSHttpBinding to support transactions using the
WS-AtomicTransactions (WS-AT) protocol. WSHttpBinding is configured to use the
protocol, but the protocol is not enabled on some computers. Use the xws_reg -wsat+
command to enable the WS-AtomicTransactions protocol in the MSDTC service.
-->
<endpoint
contract="Microsoft.WCF.Documentation.IBehaviorService"
binding="wsHttpBinding"
bindingConfiguration="wsHttpBindingWithTXFlow"
address="http://localhost:8080/BehaviorService"
/>
<endpoint
contract="Microsoft.WCF.Documentation.IBehaviorService"
binding="netTcpBinding"
bindingConfiguration="netTcpBindingWithTXFlow"
address="net.tcp://localhost:8081/BehaviorService"
/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="metadataAndDebugEnabled">
<serviceDebug
includeExceptionDetailInFaults="true"
/>
<serviceMetadata
httpGetEnabled="true"
httpGetUrl=""
/>
</behavior>
</serviceBehaviors>
</behaviors>
<!-- binding configuration - configures a WSHttpBinding to require transaction flow -->
<bindings>
<wsHttpBinding>
<binding name="wsHttpBindingWithTXFlow" transactionFlow="true" />
</wsHttpBinding>
<netTcpBinding>
<binding name="netTcpBindingWithTXFlow" transactionFlow="true" />
</netTcpBinding>
</bindings>
</system.serviceModel>
</configuration>
Açıklamalar
Yeni hizmet nesnelerinin InstanceContextMode ne zaman oluşturulacağını belirtmek için özelliğini kullanın. Hizmet nesnesi iletişim kanalına doğrudan bağlı olmadığından, hizmet nesnelerinin ömrü bir istemci ile hizmet uygulaması arasındaki kanalın ömründen bağımsızdır. Varsayılan değer olan PerSession, bir istemci ile hizmet uygulaması arasında yeni bir iletişim oturumu oluşturulduğunda hizmet uygulamasına yeni bir hizmet nesnesi oluşturma talimatı verir. Aynı oturumdaki sonraki çağrılar aynı nesne tarafından işlenir.
PerSession her hizmet nesnesinin bir istemci kanalından gelen istekleri işlediğini gösterir.
Not
InstanceContextMode özelliği diğer bazı ayarlarla etkileşim kurar. Örneğin, değer sonuca ayarlanırsaInstanceContextMode, değeri olarak ayarlamadığınız sürece hizmetinizin bir kerede yalnızca bir iletiyi işleyebileceğidirMultipleConcurrencyMode.Single Bu özellik ayrıca özelliğiyle ServiceContractAttribute.SessionMode birlikte davranış üretir. Ayrıntılar için bkz . Oturumlar, Tutarsızlık ve Eşzamanlılık.
Tekil yaşam süresi davranışı için (örneğin, konak uygulaması oluşturucuyu ServiceHost çağırır ve hizmet olarak kullanmak üzere bir nesne geçirirse), hizmet sınıfı olarak Single
ayarlanmalıdır InstanceContextMode veya çalışma zamanında bir özel durum oluşturulur.