Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Alat Utilitas Metadata ServiceModel (Svcutil.exe) menghasilkan kode klien dan file konfigurasi aplikasi klien untuk digunakan dalam membangun aplikasi klien. Topik ini menyediakan tur contoh kode yang dihasilkan untuk skenario kontrak layanan standar. Untuk informasi selengkapnya tentang membangun aplikasi klien menggunakan kode yang dihasilkan, lihat Gambaran Umum Klien WCF.
Gambaran Umum
Jika Anda menggunakan Visual Studio untuk menghasilkan jenis klien Windows Communication Foundation (WCF) untuk proyek Anda, Anda biasanya tidak perlu memeriksa kode klien yang dihasilkan. Jika Anda tidak menggunakan lingkungan pengembangan yang melakukan layanan yang sama untuk Anda, Anda dapat menggunakan alat seperti Svcutil.exe untuk menghasilkan kode klien lalu menggunakan kode tersebut untuk mengembangkan aplikasi klien Anda.
Karena Svcutil.exe memiliki sejumlah opsi yang memodifikasi informasi jenis yang dihasilkan, topik ini tidak membahas semua skenario. Namun, tugas standar berikut melibatkan menemukan kode yang dihasilkan:
Mengidentifikasi antarmuka kontrak layanan.
Mengidentifikasi kelas klien WCF.
Mengidentifikasi jenis data.
Mengidentifikasi kontrak panggilan balik untuk layanan dupleks.
Mengidentifikasi antarmuka saluran kontrak layanan pembantu.
Menemukan Antarmuka Kontrak Layanan
Untuk menemukan antarmuka yang memodelkan kontrak layanan, cari antarmuka yang ditandai dengan atribut System.ServiceModel.ServiceContractAttribute. Seringkali atribut ini dapat sulit ditemukan dengan baca cepat karena adanya atribut lain dan properti eksplisit yang diatur pada atribut itu sendiri. Ingatlah bahwa antarmuka kontrak layanan dan antarmuka kontrak klien adalah dua jenis yang berbeda. Contoh kode berikut menunjukkan kontrak layanan asli.
[ServiceContractAttribute(
Namespace = "http://microsoft.wcf.documentation"
)]
public interface ISampleService
{
[OperationContractAttribute]
[FaultContractAttribute(typeof(microsoft.wcf.documentation.SampleFault))]
string SampleMethod(string msg);
}
Contoh kode berikut menunjukkan kontrak layanan yang sama seperti yang dihasilkan oleh Svcutil.exe.
[System.ServiceModel.ServiceContractAttribute(
Namespace = "http://microsoft.wcf.documentation"
)]
public interface ISampleService
{
[System.ServiceModel.OperationContractAttribute(
Action = "http://microsoft.wcf.documentation/ISampleService/SampleMethod",
ReplyAction = "http://microsoft.wcf.documentation/ISampleService/SampleMethodResponse"
)]
[System.ServiceModel.FaultContractAttribute(
typeof(microsoft.wcf.documentation.SampleFault),
Action = "http://microsoft.wcf.documentation/ISampleService/SampleMethodSampleFaultFault"
)]
string SampleMethod(string msg);
}
Anda dapat menggunakan antarmuka kontrak layanan yang dihasilkan bersama dengan System.ServiceModel.ChannelFactory kelas untuk membuat objek saluran WCF untuk memanggil operasi layanan. Untuk informasi selengkapnya, lihat Cara: Menggunakan ChannelFactory.
Menemukan Kelas Klien WCF
Untuk menemukan kelas klien WCF yang mengimplementasikan kontrak layanan yang ingin Anda gunakan, cari ekstensi System.ServiceModel.ClientBase<TChannel>, di mana parameter jenis adalah antarmuka kontrak layanan yang sebelumnya Anda temukan dan yang memperluas antarmuka tersebut. Contoh kode berikut menunjukkan ClientBase<TChannel> kelas jenis ISampleService.
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public partial class SampleServiceClient : System.ServiceModel.ClientBase<ISampleService>, ISampleService
{
public SampleServiceClient()
{
}
public SampleServiceClient(string endpointConfigurationName)
:
base(endpointConfigurationName)
{
}
public SampleServiceClient(string endpointConfigurationName, string remoteAddress)
:
base(endpointConfigurationName, remoteAddress)
{
}
public SampleServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress)
:
base(endpointConfigurationName, remoteAddress)
{
}
public SampleServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress)
:
base(binding, remoteAddress)
{
}
public string SampleMethod(string msg)
{
return base.Channel.SampleMethod(msg);
}
}
Anda dapat menggunakan kelas klien WCF ini dengan membuat instans baru dan memanggil metode yang diterapkannya. Metode tersebut memanggil operasi layanan yang dirancang dan dikonfigurasi untuk berinteraksi. Untuk informasi selengkapnya, lihat Gambaran Umum Klien WCF.
Nota
Ketika SvcUtil.exe menghasilkan kelas klien WCF, ia menambahkan DebuggerStepThroughAttribute ke kelas klien yang mencegah debugger melangkah melalui kelas klien WCF.
Menemukan Tipe Data
Untuk menemukan jenis data dalam kode yang dihasilkan, mekanisme paling dasar adalah mengidentifikasi nama jenis yang ditentukan dalam kontrak dan mencari kode untuk deklarasi jenis tersebut. Misalnya, kontrak berikut menentukan bahwa SampleMethod dapat mengembalikan kesalahan SOAP jenis microsoft.wcf.documentation.SampleFault.
[System.ServiceModel.OperationContractAttribute(
Action = "http://microsoft.wcf.documentation/ISampleService/SampleMethod",
ReplyAction = "http://microsoft.wcf.documentation/ISampleService/SampleMethodResponse"
)]
[System.ServiceModel.FaultContractAttribute(
typeof(microsoft.wcf.documentation.SampleFault),
Action = "http://microsoft.wcf.documentation/ISampleService/SampleMethodSampleFaultFault"
)]
string SampleMethod(string msg);
Mencari SampleFault menemukan deklarasi jenis berikut.
[assembly: System.Runtime.Serialization.ContractNamespaceAttribute(
"http://microsoft.wcf.documentation",
ClrNamespace = "microsoft.wcf.documentation"
)]
namespace microsoft.wcf.documentation
{
using System.Runtime.Serialization;
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute()]
public partial class SampleFault : object, System.Runtime.Serialization.IExtensibleDataObject
{
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
private string FaultMessageField;
public System.Runtime.Serialization.ExtensionDataObject ExtensionData
{
get
{
return this.extensionDataField;
}
set
{
this.extensionDataField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string FaultMessage
{
get
{
return this.FaultMessageField;
}
set
{
this.FaultMessageField = value;
}
}
}
}
Dalam kasus ini, tipe data adalah tipe detail yang dilemparkan oleh pengecualian tertentu pada klien, dengan FaultException<TDetail> di mana parameter tipe detail adalah microsoft.wcf.documentation.SampleFault. Untuk informasi selengkapnya tentang jenis data, lihat Menentukan Transfer Data dalam Kontrak Layanan. Untuk informasi selengkapnya tentang menangani pengecualian di klien, lihat Kesalahan Pengiriman dan Penerimaan.
Menemukan Kontrak Panggilan Balik untuk Layanan Duplex
Jika Anda menemukan kontrak layanan di mana antarmuka kontrak menentukan nilai untuk properti ServiceContractAttribute.CallbackContract, maka kontrak tersebut menentukan kontrak dupleks. Kontrak Duplex mengharuskan aplikasi klien membuat kelas panggilan balik yang mengimplementasikan kontrak panggilan balik dan meneruskan instans kelas tersebut ke System.ServiceModel.DuplexClientBase<TChannel> atau System.ServiceModel.DuplexChannelFactory<TChannel> yang digunakan untuk berkomunikasi dengan layanan. Untuk informasi selengkapnya tentang klien dupleks, lihat Cara: Layanan Akses dengan Kontrak Dupleks.
Kontrak berikut menentukan kontrak panggilan balik jenis SampleDuplexHelloCallback.
[System.ServiceModel.ServiceContractAttribute(
Namespace="http://microsoft.wcf.documentation",
ConfigurationName="SampleDuplexHello",
CallbackContract=typeof(SampleDuplexHelloCallback),
SessionMode=System.ServiceModel.SessionMode.Required
)]
public interface SampleDuplexHello
{
[System.ServiceModel.OperationContractAttribute(
IsOneWay=true,
Action="http://microsoft.wcf.documentation/SampleDuplexHello/Hello"
)]
void Hello(string greeting);
}
<System.ServiceModel.OperationContractAttribute(IsOneWay:=True, _
Action:="http://microsoft.wcf.documentation/SampleDuplexHello/Hello")> _
Sub Hello(ByVal greeting As String)
End Interface 'SampleDuplexHello
Mencari kontrak panggilan balik tersebut menemukan antarmuka berikut yang harus diterapkan aplikasi klien.
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public interface SampleDuplexHelloCallback
{
[System.ServiceModel.OperationContractAttribute(
IsOneWay=true,
Action="http://microsoft.wcf.documentation/SampleDuplexHello/Reply"
)]
void Reply(string responseToGreeting);
}
<System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")> _
Public Interface SampleDuplexHelloCallback
<System.ServiceModel.OperationContractAttribute( _
IsOneWay:=True, _
Action:="http://microsoft.wcf.documentation/SampleDuplexHello/Reply")> _
Sub Reply(ByVal responseToGreeting As String)
End Interface 'SampleDuplexHelloCallback
Menemukan Antarmuka Saluran Kontrak Layanan
Saat menggunakan ChannelFactory kelas dengan antarmuka kontrak layanan, Anda harus mentransmisikan ke System.ServiceModel.IClientChannel antarmuka untuk membuka, menutup, atau membatalkan saluran secara eksplisit. Untuk mempermudah pekerjaan, alat Svcutil.exe juga menghasilkan antarmuka pembantu yang mengimplementasikan antarmuka kontrak layanan dan IClientChannel memungkinkan Anda berinteraksi dengan infrastruktur saluran klien tanpa harus mentransmisikan. Kode berikut menunjukkan definisi saluran klien pembantu yang mengimplementasikan kontrak layanan sebelumnya.
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public interface ISampleServiceChannel : ISampleService, System.ServiceModel.IClientChannel
{
}