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.
Setelah Anda merancang kontrak layanan (Merancang Kontrak Layanan) dan menerapkan kontrak layanan Anda (Menerapkan Kontrak Layanan) Anda dapat mengonfigurasi perilaku operasi runtime layanan. Topik ini membahas perilaku layanan dan operasi yang disediakan sistem dan menjelaskan tempat menemukan informasi lebih lanjut untuk membuat perilaku baru. Meskipun beberapa perilaku diterapkan sebagai atribut, banyak yang diterapkan menggunakan file konfigurasi aplikasi atau secara terprogram. Untuk informasi selengkapnya tentang mengonfigurasi aplikasi layanan Anda, lihat Mengonfigurasi Layanan.
Gambaran Umum
Kontrak mendefinisikan input, output, jenis data, dan kemampuan layanan jenis tersebut. Menerapkan kontrak layanan membuat kelas yang, ketika dikonfigurasi dengan pengikatan pada suatu alamat, memenuhi kontrak yang diimplementasikannya. Informasi kontraktual, pengikatan, dan alamat semuanya diketahui oleh klien; tanpa mereka, klien tidak dapat menggunakan layanan.
Namun, operasi spesifik, seperti masalah utas atau manajemen instans, tidak terlihat jelas bagi klien. Setelah menerapkan kontrak layanan, Anda dapat mengonfigurasi sejumlah besar karakteristik operasi dengan menggunakan perilaku. Perilaku adalah objek yang mengubah runtime Windows Communication Foundation (WCF) dengan mengatur properti runtime atau dengan memasukkan tipe kustomisasi ke dalam runtime. Untuk informasi selengkapnya tentang memodifikasi runtime dengan membuat perilaku yang ditentukan pengguna, lihat Memperluas ServiceHost dan Lapisan Model Layanan.
Atribut System.ServiceModel.ServiceBehaviorAttribute dan System.ServiceModel.OperationBehaviorAttribute adalah perilaku yang paling berguna dan mengekspos fitur operasi yang paling umum diminta. Karena merupakan atribut, Anda menerapkannya ke implementasi layanan atau operasi. Perilaku lain, seperti System.ServiceModel.Description.ServiceMetadataBehavior atau System.ServiceModel.Description.ServiceDebugBehavior, biasanya diterapkan menggunakan file konfigurasi aplikasi, meskipun Anda dapat menggunakannya secara terprogram.
Topik ini memberikan gambaran umum tentang atribut ServiceBehaviorAttribute dan OperationBehaviorAttribute, menjelaskan berbagai cakupan di mana perilaku dapat beroperasi, serta memberikan deskripsi cepat tentang banyak perilaku yang diberikan oleh sistem di berbagai cakupan yang mungkin menarik bagi pengembang WCF.
ServiceBehaviorAttribute dan OperationBehaviorAttribute
Perilaku yang paling penting adalah ServiceBehaviorAttribute atribut dan OperationBehaviorAttribute , yang dapat Anda gunakan untuk mengontrol:
Masa pakai instans
Dukungan konkurensi dan sinkronisasi
Perilaku konfigurasi
Perilaku transaksi
Perilaku serialisasi
Transformasi metadata
Masa pakai sesi
Pemfilteran alamat dan pemrosesan header
Peniruan
Untuk menggunakan atribut ini, tandai implementasi layanan atau operasi dengan atribut yang sesuai dengan cakupan tersebut dan atur properti. Misalnya, contoh kode berikut menunjukkan implementasi operasi yang menggunakan properti OperationBehaviorAttribute.Impersonation untuk memastikan bahwa pemanggil operasi ini mendukung impersonasi.
using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Threading;
namespace Microsoft.WCF.Documentation
{
[ServiceContract(
Name="SampleHello",
Namespace="http://microsoft.wcf.documentation"
)]
public interface IHello
{
[OperationContract]
string Hello(string greeting);
}
public class HelloService : IHello
{
public HelloService()
{
Console.WriteLine("Service object created: " + this.GetHashCode().ToString());
}
~HelloService()
{
Console.WriteLine("Service object destroyed: " + this.GetHashCode().ToString());
}
[OperationBehavior(Impersonation=ImpersonationOption.Required)]
public string Hello(string greeting)
{
Console.WriteLine("Called by: " + Thread.CurrentPrincipal.Identity.Name);
Console.WriteLine("IsAuthenticated: " + Thread.CurrentPrincipal.Identity.IsAuthenticated.ToString());
Console.WriteLine("AuthenticationType: " + Thread.CurrentPrincipal.Identity.AuthenticationType.ToString());
Console.WriteLine("Caller sent: " + greeting);
Console.WriteLine("Sending back: Hi, " + Thread.CurrentPrincipal.Identity.Name);
return "Hi, " + Thread.CurrentPrincipal.Identity.Name;
}
}
}
Imports System.ServiceModel
Imports System.Threading
Namespace Microsoft.WCF.Documentation
<ServiceContract(Name:="SampleHello", Namespace:="http://microsoft.wcf.documentation")> _
Public Interface IHello
<OperationContract> _
Function Hello(ByVal greeting As String) As String
End Interface
Public Class HelloService
Implements IHello
Public Sub New()
Console.WriteLine("Service object created: " & Me.GetHashCode().ToString())
End Sub
Protected Overrides Sub Finalize()
Console.WriteLine("Service object destroyed: " & Me.GetHashCode().ToString())
End Sub
<OperationBehavior(Impersonation:=ImpersonationOption.Required)> _
Public Function Hello(ByVal greeting As String) As String Implements IHello.Hello
Console.WriteLine("Called by: " & Thread.CurrentPrincipal.Identity.Name)
Console.WriteLine("IsAuthenticated: " & Thread.CurrentPrincipal.Identity.IsAuthenticated.ToString())
Console.WriteLine("AuthenticationType: " & Thread.CurrentPrincipal.Identity.AuthenticationType.ToString())
Console.WriteLine("Caller sent: " & greeting)
Console.WriteLine("Sending back: Hi, " & Thread.CurrentPrincipal.Identity.Name)
Return "Hi, " & Thread.CurrentPrincipal.Identity.Name
End Function
End Class
End Namespace
Banyak properti memerlukan dukungan lebih lanjut dari proses pengikatan. Misalnya, operasi yang memerlukan transaksi dari klien harus dikonfigurasi untuk menggunakan pengikatan yang mendukung transaksi yang mengalir.
Layanan Singleton yang Dikenal Baik
Anda dapat menggunakan ServiceBehaviorAttribute atribut dan OperationBehaviorAttribute untuk mengontrol masa pakai tertentu, baik dari InstanceContext dan objek layanan yang mengimplementasikan operasi.
Misalnya, ServiceBehaviorAttribute.InstanceContextMode properti mengontrol seberapa sering InstanceContext dirilis, dan OperationBehaviorAttribute.ReleaseInstanceMode properti dan ServiceBehaviorAttribute.ReleaseServiceInstanceOnTransactionComplete mengontrol kapan objek layanan dirilis.
Namun, Anda juga dapat membuat objek layanan sendiri dan membuat host layanan menggunakan objek tersebut. Untuk melakukan hal tersebut, Anda juga harus menetapkan properti ServiceBehaviorAttribute.InstanceContextMode ke Single, atau akan terjadi pengecualian saat host layanan dibuka.
Gunakan konstruktor ServiceHost(Object, Uri[]) untuk membuat layanan semacam itu. Ini menyediakan alternatif untuk menerapkan implementasi kustom System.ServiceModel.Dispatcher.IInstanceContextInitializer ketika Anda ingin menyediakan instans objek tertentu untuk digunakan oleh layanan singleton. Anda dapat menggunakan kelebihan beban ini ketika jenis implementasi layanan Anda sulit dibangun (misalnya, jika tidak menerapkan konstruktor publik tanpa parameter).
Perhatikan bahwa ketika objek disediakan untuk konstruktor ini, beberapa fitur yang terkait dengan perilaku instancing Windows Communication Foundation (WCF) bekerja secara berbeda. Misalnya, memanggil InstanceContext.ReleaseServiceInstance tidak berpengaruh ketika instance objek yang sudah dikenal disediakan. Demikian pula, mekanisme rilis instans lainnya diabaikan. Kelas ServiceHost selalu berperilaku seolah-olah properti OperationBehaviorAttribute.ReleaseInstanceMode ini diatur ke ReleaseInstanceMode.None dalam setiap operasi.
Perilaku Layanan, Titik Akhir, Kontrak, dan Operasi Lainnya
Perilaku layanan, seperti atribut ServiceBehaviorAttribute, beroperasi di seluruh layanan. Misalnya, jika Anda mengatur properti ServiceBehaviorAttribute.ConcurrencyMode ke ConcurrencyMode.Multiple, Anda harus menangani masalah sinkronisasi utas sendiri dalam setiap operasi dalam layanan tersebut. Perilaku titik akhir beroperasi di seluruh titik akhir; banyak perilaku titik akhir yang disediakan sistem adalah untuk fungsionalitas klien. Perilaku kontrak beroperasi pada level kontrak, dan perilaku operasi memodifikasi pelaksanaan operasi.
Banyak dari perilaku ini diimplementasikan pada atribut, dan Anda menggunakannya dengan cara yang sama seperti atribut ServiceBehaviorAttribute dan OperationBehaviorAttribute, yaitu dengan menerapkannya ke kelas layanan atau implementasi operasi yang sesuai. Perilaku lain, seperti ServiceMetadataBehavior atau ServiceDebugBehavior objek, biasanya diterapkan menggunakan file konfigurasi aplikasi, meskipun juga dapat digunakan secara terprogram.
Misalnya, publikasi metadata dikonfigurasi dengan menggunakan ServiceMetadataBehavior objek . File konfigurasi aplikasi berikut menunjukkan penggunaan yang paling umum.
<configuration>
<system.serviceModel>
<services>
<service
name="Microsoft.WCF.Documentation.SampleService"
behaviorConfiguration="metadataSupport"
>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/SampleService" />
</baseAddresses>
</host>
<endpoint
address=""
binding="wsHttpBinding"
contract="Microsoft.WCF.Documentation.ISampleService"
/>
<!-- Adds a WS-MetadataExchange endpoint at -->
<!-- "http://localhost:8080/SampleService/mex" -->
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="metadataSupport">
<!-- Enables the IMetadataExchange endpoint in services that -->
<!-- use "metadataSupport" in their behaviorConfiguration attribute. -->
<!-- In addition, the httpGetEnabled and httpGetUrl attributes publish -->
<!-- Service metadata for retrieval by HTTP/GET at the address -->
<!-- "http://localhost:8080/SampleService?wsdl" -->
<serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Bagian berikut menjelaskan banyak perilaku yang disediakan sistem yang paling berguna yang dapat Anda gunakan untuk memodifikasi pengiriman runtime layanan atau klien Anda. Lihat topik referensi untuk menentukan cara menggunakan masing-masing topik.
Perilaku Layanan
Perilaku berikut beroperasi pada layanan.
AspNetCompatibilityRequirementsAttribute. Diterapkan ke layanan WCF untuk menunjukkan apakah layanan tersebut dapat dijalankan dalam Mode Kompatibilitas ASP.NET.
ServiceAuthorizationBehavior. Mengontrol bagaimana layanan mengotorisasi klaim klien.
ServiceCredentials. Mengonfigurasi kredensial layanan. Gunakan kelas ini untuk menentukan kredensial untuk layanan, seperti sertifikat X.509.
ServiceDebugBehavior. Mengaktifkan fitur debugging dan informasi Bantuan untuk layanan WCF.
ServiceMetadataBehavior. Mengontrol publikasi metadata layanan dan informasi terkait.
ServiceSecurityAuditBehavior. Menentukan perilaku audit peristiwa keamanan.
ServiceThrottlingBehavior. Mengonfigurasi pengaturan throughput runtime yang memungkinkan Anda menyetel performa layanan.
Perilaku Titik Akhir
Perilaku berikut beroperasi pada titik akhir. Banyak dari perilaku ini digunakan dalam aplikasi klien.
CallbackBehaviorAttribute. Mengonfigurasi implementasi layanan panggilan balik dalam aplikasi klien dupleks.
CallbackDebugBehavior. Memungkinkan debug layanan untuk objek panggilan balik WCF.
ClientCredentials. Memungkinkan pengguna untuk mengonfigurasi kredensial klien dan layanan serta pengaturan autentikasi kredensial layanan untuk digunakan pada klien.
ClientViaBehavior. Digunakan oleh klien untuk menentukan URI (Pengidentifikasi Sumber Daya Seragam) yang untuk itu saluran transportasi harus dibuat.
MustUnderstandBehavior. Instruksikan WCF untuk menonaktifkan pemrosesan
MustUnderstand.SynchronousReceiveBehavior. Menginstruksikan runtime untuk menggunakan proses penerimaan sinkron untuk saluran.
TransactedBatchingBehavior. Mengoptimalkan operasi penerimaan untuk transportasi yang mendukung penerimaan transaksional.
Perilaku Kontrak
DeliveryRequirementsAttribute. Menentukan persyaratan fitur yang harus disediakan oleh pengikatan ke layanan atau implementasi klien.
Perilaku Operasi
Perilaku operasi berikut menentukan serialisasi dan kontrol transaksi untuk operasi.
DataContractSerializerOperationBehavior. Mewakili perilaku runtime dari System.Runtime.Serialization.DataContractSerializer.
XmlSerializerOperationBehavior. Mengontrol perilaku
XmlSerializerruntime dan mengaitkannya dengan operasi.TransactionFlowAttribute. Menentukan tingkat di mana operasi layanan menerima header transaksi.