Megosztás a következőn keresztül:


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

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

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

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