Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Az Alapértelmezett üzenetszerződés minta egy olyan szolgáltatást mutat be, amelyben egy egyéni, felhasználó által meghatározott üzenetet kerünek átadásra a szolgáltatás műveleteihez. Ez a minta a számológép felületét gépelt szolgáltatásként megvalósító első lépéseken alapul. Az Első lépések részben használt különálló szolgáltatásműveletek, mint az összeadás, kivonás, szorzás és osztás helyett, ez a példa egyedi üzenetet továbbít, amely magában foglalja az operandusokat és az operátort, majd visszaadja az aritmetikai számítás eredményét.
Az ügyfél egy konzolprogram (.exe), a szolgáltatástárat (.dll) pedig az Internet Information Services (IIS) üzemelteti. Az ügyféltevékenység látható a konzolablakban.
Megjegyzé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.
A szolgáltatásban egyetlen szolgáltatásművelet van definiálva, amely fogadja és visszaadja az MyMessageegyéni típusú üzeneteket. Bár ebben a mintában a kérés- és válaszüzenetek azonos típusúak, szükség esetén természetesen eltérő üzenetszerződések is lehetnek.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract(Action="http://test/MyMessage_action",
ReplyAction="http://test/MyMessage_action")]
MyMessage Calculate(MyMessage request);
}
Az egyéni üzenet MyMessage egy osztályban van definiálva, amely MessageContractAttribute, MessageHeaderAttribute és MessageBodyMemberAttribute attribútumokkal van ellátva. Ebben a mintában csak a harmadik konstruktor használható. Az üzenetszerződések használatával teljes mértékben szabályozhatja a SOAP-üzenetet. Ebben a mintában az MessageHeaderAttribute attribútum egy SOAP-fejlécbe kerül Operation . Az operandusok N1, N2 és a Result a SOAP törzsben jelennek meg, mert alkalmazták rájuk a MessageBodyMemberAttribute attribútumot.
[MessageContract]
public class MyMessage
{
private string operation;
private double n1;
private double n2;
private double result;
//Constructor - create an empty message.
public MyMessage() {}
//Constructor - create a message and populate its members.
public MyMessage(double n1, double n2, string operation,
double result)
{
this.n1 = n1;
this.n2 = n2;
this.operation = operation;
this.result = result;
}
//Constructor - create a message from another message.
public MyMessage(MyMessage message)
{
this.n1 = message.n1;
this.n2 = message.n2;
this.operation = message.operation;
this.result = message.result;
}
[MessageHeader]
public string Operation
{
get { return operation; }
set { operation = value; }
}
[MessageBodyMember]
public double N1
{
get { return n1; }
set { n1 = value; }
}
[MessageBodyMember]
public double N2
{
get { return n2; }
set { n2 = value; }
}
[MessageBodyMember]
public double Result
{
get { return result; }
set { result = value; }
}
}
A implementációs osztály tartalmazza a szolgáltatásművelet kódját Calculate . Az CalculateService osztály lekéri az operandusokat és az operátort a kérelemüzenetből, és létrehoz egy válaszüzenetet, amely tartalmazza a kért számítás eredményét, ahogyan az az alábbi mintakódban látható.
// Service class which implements the service contract.
public class CalculatorService : ICalculator
{
// Perform a calculation.
public MyMessage Calculate(MyMessage request)
{
MyMessage response = new MyMessage(request);
switch (request.Operation)
{
case "+":
response.Result = request.N1 + request.N2;
break;
case "-":
response.Result = request.N1 - request.N2;
break;
case "*":
response.Result = request.N1 * request.N2;
break;
case "/":
response.Result = request.N1 / request.N2;
break;
default:
response.Result = 0.0D;
break;
}
return response;
}
}
Az ügyfélhez létrehozott ügyfélkód a ServiceModel Metadata Utility Tool (Svcutil.exe) eszközzel lett létrehozva. Az eszköz szükség esetén automatikusan létrehozza az üzenetszerződés-típusokat a létrehozott ügyfélkódban. Az /messageContract parancsbeállítást meg lehet adni az üzenetszerződések létrehozásának kényszerítésére.
svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" /o:client\generatedClient.cs http://localhost/servicemodelsamples/service.svc/mex
A következő mintakód bemutatja, hogyan használja az ügyfél a MyMessage üzenetet.
// Create a client with given client endpoint configuration
CalculatorClient client = new CalculatorClient();
// Perform addition using a typed message.
MyMessage request = new MyMessage()
{
N1 = 100D,
N2 = 15.99D,
Operation = "+"
};
MyMessage response = ((ICalculator)client).Calculate(request);
Console.WriteLine("Add({0},{1}) = {2}", request.N1, request.N2, response.Result);
A minta futtatásakor a számítások megjelennek az ügyfélkonzol ablakában. Nyomja le az ENTER billentyűt az ügyfélablakban az ügyfél leállításához.
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.
Ezen a ponton az ügyfél és a szolgáltatásművelet között egyéni, felhasználó által definiált üzenetek mentek át. Az üzenetszerződés meghatározta, hogy az operandusok és az eredmények az üzenet törzsében voltak, és hogy az operátor egy üzenetfejlécben volt. Az üzenetnaplózás konfigurálható az üzenetstruktúra megfigyelésére.
A példa beállítása, elkészítése és futtatása
Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-minták One-Time 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 Windows Communication Foundation-mintákcímű témakör utasításait.
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ásacímű témakör utasításait.