Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ukázka výchozího kontraktu zpráv ukazuje službu, ve které se vlastní uživatelem definovaná zpráva předává do a z operací služby. Tato ukázka je založená na Getting Started, která implementuje rozhraní kalkulačky jako typovou službu. Místo toho, aby byly v části Začínáme použité jednotlivé operace služby pro sčítání, odčítání, násobení a dělení, tato ukázka předává vlastní zprávu, která obsahuje operandy i operátor, a vrátí výsledek aritmetického výpočtu.
Klient je konzolový program (.exe) a knihovna služeb (.dll) je hostovaná službou IIS (Internet Information Services). Aktivita klienta je viditelná v okně konzoly.
Poznámka:
Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.
Ve službě je definována jedna operace služby, která přijímá a vrací vlastní zprávy typu MyMessage. I když v této ukázce jsou zprávy požadavků a odpovědí stejného typu, samozřejmě by mohly být různé kontrakty zpráv v případě potřeby.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract(Action="http://test/MyMessage_action",
ReplyAction="http://test/MyMessage_action")]
MyMessage Calculate(MyMessage request);
}
Vlastní zpráva MyMessage je definována ve třídě označené atributy MessageContractAttribute, MessageHeaderAttribute a MessageBodyMemberAttribute. V této ukázce se používá pouze třetí konstruktor. Použití kontraktů zpráv umožňuje vykonávat úplnou kontrolu nad zprávou SOAP. V této ukázce je atribut MessageHeaderAttribute použit k vložení Operation do hlavičky SOAP. Operandy N1, N2 a Result se zobrazují v těle SOAP, protože mají aplikovaný atribut MessageBodyMemberAttribute.
[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; }
}
}
Třída implementace obsahuje kód pro Calculate operaci služby. Třída CalculateService získá operandy a operátor ze zprávy požadavku a vytvoří zprávu odpovědi, která obsahuje výsledek požadovaného výpočtu, jak je znázorněno v následujícím vzorovém kódu.
// 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;
}
}
Vygenerovaný kód klienta pro klienta byl vytvořen pomocí nástroje ServiceModel Metadata Utility Tool (Svcutil.exe). Nástroj v případě potřeby automaticky vytvoří typy kontraktů zpráv ve vygenerovaném klientském kódu. Volba příkazu /messageContract může být zadána k vynucení generování smluv o zprávách.
svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" /o:client\generatedClient.cs http://localhost/servicemodelsamples/service.svc/mex
Následující ukázkový kód demonstruje použití zprávy MyMessage klientem.
// 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);
Při spuštění ukázky se výpočty zobrazí v okně konzoly klienta. Stisknutím klávesy ENTER v okně klienta klienta ukončete klienta.
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.
V tomto okamžiku se mezi klientem a operací služby předávaly vlastní uživatelem definované zprávy. Kontrakt zprávy definoval, že operandy a výsledky byly v textu zprávy a že operátor byl v záhlaví zprávy. Protokolování zpráv lze nakonfigurovat tak, aby sledovalo tuto strukturu zpráv.
Jak nastavit, sestavit a spustit ukázku
Ujistěte se, že jste provedli instalační proceduru One-Time pro ukázky Windows Communication Foundation.
Pokud chcete sestavit verzi C# nebo Visual Basic .NET řešení, postupujte podle pokynů v Sestavení ukázek Windows Communication Foundation.
Pokud chcete spustit ukázku v konfiguraci pro jeden počítač nebo pro více počítačů, postupujte podle pokynů v Spuštění ukázek Windows Communication Foundation.