Munkamenet
A munkamenet-minta bemutatja, hogyan valósítható meg egy munkamenetet igénylő szerződés. A munkamenetek több művelet végrehajtásának kontextusát biztosítják. Ez lehetővé teszi, hogy a szolgáltatás állapotot társítson egy adott munkamenethez, így a későbbi műveletek egy korábbi művelet állapotát használhatják. Ez a minta az első lépéseken alapul, amely egy számológép szolgáltatást implementál. A ICalculator
szerződést úgy módosították, hogy lehetővé tegye az aritmetikai műveletek végrehajtását, miközben a futó eredmény megmarad. Ezt a funkciót a ICalculatorSession
szerződés határozza meg. A szolgáltatás fenntartja az ügyfél állapotát, mivel a rendszer több szolgáltatásműveletet hív meg egy számítás végrehajtásához. Az ügyfél hívással Result()
lekérheti az aktuális eredményt, és hívással Clear()
nullára törölheti az eredményt.
Ebben a mintában az ügyfél egy konzolalkalmazás (.exe), és a szolgáltatást az Internet Information Services (IIS) üzemelteti.
Feljegyzés
A minta telepítési eljárása és összeállítási utasításai a témakör végén találhatók.
SessionMode A szerződés Required
beállításával biztosítható, hogy amikor a szerződés egy adott kötésen keresztül jelenik meg, a kötés támogatja a munkameneteket. Ha a kötés nem támogatja a munkameneteket, a rendszer kivételt okoz. Az ICalculatorSession
interfész úgy van definiálva, hogy egy vagy több művelet meghívható, ami módosítja a futó eredményt, ahogy az az alábbi mintakódban látható.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples", SessionMode=SessionMode.Required)]
public interface ICalculatorSession
{
[OperationContract(IsOneWay=true)]
void Clear();
[OperationContract(IsOneWay = true)]
void AddTo(double n);
[OperationContract(IsOneWay = true)]
void SubtractFrom(double n);
[OperationContract(IsOneWay = true)]
void MultiplyBy(double n);
[OperationContract(IsOneWay = true)]
void DivideBy(double n);
[OperationContract]
double Result();
}
A szolgáltatás egy InstanceContextMode adott PerSession szolgáltatáspéldány-környezetet köt az egyes bejövő munkamenetekhez. Ez lehetővé teszi, hogy a szolgáltatás fenntartsa a helyi tagváltozó egyes munkameneteinek futó eredményét.
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
public class CalculatorService : ICalculatorSession
{
double result = 0.0D;
public void Clear()
{ result = 0.0D; }
public void AddTo(double n)
{ result += n; }
public void SubtractFrom(double n)
{ result -= n; }
public void MultiplyBy(double n)
{ result *= n; }
public void DivideBy(double n)
{ result /= n; }
public double Result()
{ return result; }
}
A minta futtatásakor az ügyfél több kérést küld a kiszolgálónak, és kéri az eredményt, amelyet aztán megjelenít az ügyfélkonzol ablakában. Nyomja le az ENTER billentyűt az ügyfélablakban az ügyfél leállításához.
(((0 + 100) - 50) * 17.65) / 2 = 441.25
Press <ENTER> to terminate client.
A minta beállítása, összeállítása és futtatása
Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-minták egyszeri beállítási eljárását.
A megoldás C# vagy Visual Basic .NET kiadásának létrehozásához kövesse a Windows Communication Foundation-minták készítéséhez szükséges utasításokat.
Ha a mintát egy vagy több gép közötti konfigurációban szeretné futtatni, kövesse a Windows Communication Foundation-minták futtatásával kapcsolatos utasításokat.