Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Varsayılan İleti Sözleşmesi örneği, kullanıcı tarafından tanımlanan özel bir iletinin hizmet işlemlerine aktarılıp hizmet işlemlerinden geri alındığı bir hizmeti gösterir. Bu örnek, bir hesap makinesi arabirimini tipli hizmet olarak uygulayan Başlangıç Kılavuzu temel alır. Başlarken'de kullanılan toplama, çıkarma, çarpma ve bölme için tek tek hizmet işlemleri yerine, bu örnek hem işlenenleri hem de operatörü içeren özel bir mesaj geçirir ve aritmetik hesaplamanın sonucunu döndürür.
İstemci bir konsol programıdır (.exe) ve hizmet kitaplığı (.dll) Internet Information Services (IIS) tarafından barındırılır. İstemci etkinliği konsol penceresinde görünür.
Uyarı
Bu örnek için kurulum yordamı ve derleme yönergeleri bu konunun sonunda yer alır.
Hizmette, türünde MyMessageözel iletileri kabul eden ve döndüren tek bir hizmet işlemi tanımlanır. Bu örnekte istek ve yanıt iletileri aynı türde olsa da, gerekirse farklı ileti sözleşmeleri olabilir.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract(Action="http://test/MyMessage_action",
ReplyAction="http://test/MyMessage_action")]
MyMessage Calculate(MyMessage request);
}
Özel mesaj MyMessage, MessageContractAttribute, MessageHeaderAttribute ve MessageBodyMemberAttribute öznitelikleriyle açıklamalı bir sınıfta tanımlanır. Bu örnekte yalnızca üçüncü oluşturucu kullanılır. İleti sözleşmelerini kullanmak SOAP iletisi üzerinde tam denetime sahip olmanıza olanak tanır. Bu örnekte, MessageHeaderAttribute özniteliği, Operation'yi bir SOAP üstbilgisine koymak için kullanılır. İşlenenler N1, N2 ve Result, MessageBodyMemberAttribute özniteliğinin uygulanmasından dolayı SOAP gövdesinde görünür.
[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; }
}
}
Uygulama sınıfı, hizmet işleminin Calculate kodunu içerir. sınıfı, CalculateService istek iletisinden işlenenleri ve işleci alır ve aşağıdaki örnek kodda gösterildiği gibi istenen hesaplamanın sonucunu içeren bir yanıt iletisi oluşturur.
// 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;
}
}
İstemci için oluşturulan istemci kodu ServiceModel Meta Veri Yardımcı Programı Aracı (Svcutil.exe) aracıyla oluşturulmuştur. Araç, gerekirse oluşturulan istemci kodunda ileti sözleşmesi türlerini otomatik olarak oluşturur.
/messageContract İleti sözleşmelerinin oluşturulmasını zorlamak için komut seçeneği belirtilebilir.
svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" /o:client\generatedClient.cs http://localhost/servicemodelsamples/service.svc/mex
Aşağıdaki örnek kod, istemcinin MyMessage mesajını nasıl kullandığını gösterir.
// 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);
Örneği çalıştırdığınızda, hesaplamalar istemci konsolu penceresinde görüntülenir. İstemciyi kapatmak için istemci penceresinde ENTER tuşuna basın.
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.
Bu noktada, istemci ile hizmet işlemi arasında özel kullanıcı tanımlı iletiler geçirildi. İleti sözleşmesi, işlenenlerin ve sonuçların ileti gövdesinde, işlecin ise bir ileti üst bilgisinde yer aldığını tanımladı. İleti günlüğü, bu ileti yapısını gözlemlemek için yapılandırılabilir.
Örneği ayarlamak, derlemek ve çalıştırmak için
Windows Communication Foundation Örnekleri içinOne-Time Kurulum Yordamını yaptığınızdan emin olun.
Çözümün C# veya Visual Basic .NET sürümünü oluşturmak için Windows Communication Foundation Örneklerioluşturma başlığındaki yönergeleri izleyin.
Örneği tek bir makine veya makineler arası bir yapılandırmada çalıştırmak için, Windows Communication Foundation örneklerini çalıştırmayönergelerini izleyin.