Home Game&Download Tutorial CheatGame Artikel&LainLain

Minggu, 24 Januari 2010

tugas artikel layanan web (ali irdan *067006069*)

Web Service Software Factory Modeling Edition
Gerardo de Geest dan Gerben van Loon



Web Service Software Factory: Modeling Edition, yang juga dikenal sebagai Layanan Factory, adalah kumpulan sumber daya untuk membantu Anda membangun model dan layanan web untuk Windows ® Communication Foundation (WCF) dan ASMX dalam sebuah cara yang mudah dan efisien. Perbedaan utama dari versi sebelumnya dari Layanan Pabrik adalah bahwa edisi terbaru ini menggunakan model-model sedangkan rilis sebelumnya didasarkan pada penyihir dengan cara Otomasi Pembinaan Toolkit (GAT). Pabrik Layanan sekarang memungkinkan Anda untuk membangun layanan Web dengan menciptakan tiga model yang berbeda: kontrak data model, model kontrak pelayanan, dan model tuan rumah. Kami pertama-tama akan membahas tiga model ini, dan kemudian kami akan menunjukkan kepada Anda bagaimana untuk menyesuaikan Layanan Factory. Anda dapat menemukan informasi tambahan pada situs Web yang tercantum dalam "Online Service Factory Resources" sidebar.
Kerugian utama menggunakan penyihir dengan cara GAT kode untuk melakukan generasi adalah bahwa hal itu memperumit masalah ketika Anda harus mengubah sesuatu di dalam kode yang dihasilkan. Misalnya anda ingin mengganti nama operasi yang dihasilkan dari layanan-Anda harus juga menyimpan kode kustom dan mengulang seluruh penyihir di mana Anda menggunakan nama baru atau mengganti nama operasi di kode yang dihasilkan. Mengulangi wizard adalah memakan waktu; sejak penyihir tidak memiliki memori, Anda harus menentukan semuanya lagi. Mengubah kode yang dihasilkan oleh wizard tidak ideal, baik karena Anda akan kembali bekerja dalam rincian sementara tujuan dari wizard ini untuk menghindari hal ini. Model memberikan solusi yang baik untuk masalah karena, berbeda dengan penyihir, model mampu mengingat masukan Anda.
Bangunan bahasa pemodelan yang mengintegrasikan ke dalam Visual Studio ® adalah sulit di masa lalu, tetapi Domain-Specific Language (DSL) Peralatan yang dikirimkan dengan Visual Studio SDK membuatnya lebih mudah. Pabrik Layanan sekarang kapal dengan tiga jenis model yang dibangun menggunakan DSL Tools. Perhatikan bahwa tidak ada model untuk layanan akses data dan keamanan. Bimbingan Akses Data Paket dari Pabrik Layanan sebelumnya rilis sekarang tersedia sebagai pabrik yang terpisah yang disebut Repository Pabrik, dan Bimbingan Paket Keamanan tersedia sebagai paket terpisah dalam Layanan Pabrik situs komunitas.
Versi baru dari Pabrik Layanan ini juga berfungsi sebagai contoh yang baik untuk membangun Pabrik Software Anda sendiri karena menggunakan dan menggabungkan semua alat yang tersedia untuk membangun satu:
• GAT untuk ahli-ahli sihir yang digunakan untuk menghasilkan proyek-proyek dan menyediakan menu konteks
• DSL Alat untuk tiga model yang berbeda jenis
• Layanan Integrasi Designer (DIS) untuk mendukung model referensi silang
Pabrik Layanan sumber menarik juga berisi beberapa library yang memiliki fitur alat pabrik saat ini tidak punya. Itu bisa menarik untuk menggunakan kembali ini jika Anda sedang membangun pabrik Anda sendiri:
• Sebuah kode-generasi perpustakaan yang memungkinkan Anda untuk menghasilkan kode di file terpisah
• Sebuah validasi silang model perpustakaan untuk membantu Anda dalam memverifikasi model referensi silang
• Sebuah objek tiruan Visual Studio perpustakaan untuk membantu Anda dengan mudah menguji unit pabrik Anda
Seperti yang telah disebutkan, Layanan Pabrik terdiri dari tiga jenis model. Dalam model kontrak data, data kontrak layanan Web yang ditetapkan. Dalam model kontrak jasa, layanan dan kontrak, operasi, dan pesan yang ditetapkan. Akhirnya, model host digunakan untuk model layanan titik-titik ujung dan klien proxy.
Untuk memperkenalkan pabrik, kita akan menciptakan sebuah layanan Web untuk memesan pizza dari Peedy's Pizza Palace. Layanan Web akan menerima perintah untuk pizza, memungkinkan Anda untuk memilih di antara berbagai ukuran dan topping yang berbeda. Ketika perintah ini ditempatkan, harga pesanan dikembalikan ke pelanggan sebagai konfirmasi.

Kontrak Model data
Dalam model kontrak data, berbagai jenis data dapat dimodelkan bersama. Selain untuk mendefinisikan tipe dasar sebagai elemen kontrak, Anda juga dapat mendefinisikan koleksi, enumerations, dan kesalahan kontrak. Fault kontrak dapat dikembalikan ketika beberapa error yang terjadi dalam pelayanan.
Dalam data model kontrak untuk Peedy's Pizza Palace, kita telah mendefinisikan sebuah PizzaOrder sebagai kumpulan pizza bahwa pelanggan ingin memesan. Setiap pizza memiliki ukuran dan topping. Ini adalah model menggunakan enumerations. Lebih jauh lagi, kita telah mendefinisikan suatu kesalahan kontrak, OutOfOrder, yang dilemparkan dalam kasus pizza rusak, yang berarti bahwa Peedy's Pizza Istana tidak dapat memberikan pizza karena kehilangan beberapa bagian dari topping. Juga memungkinkan untuk kembali nilai-nilai bahkan ketika ada kesalahan kontrak. Sebagai contoh, dalam kasus ini kita menunjukkan harga agar pengguna tetap. Data selengkapnya model kontrak ditunjukkan pada Gambar 1.



Gambar 1 Data Kontrak Model Peedy's Pizza Palace (Klik pada gambar untuk tampilan lebih besar)

Model Kontrak Service
Data kontrak digunakan dalam model kontrak layanan. Dalam contoh ini, layanan kontrak dan operasi dari Peedy's Pizza Palace layanan Web adalah model. Model (lihat Gambar 2) adalah sebenarnya cukup sederhana karena kita hanya perlu operasi untuk memesan pizza.

Gambar 2 Model Kontrak Service Peedy's Pizza Palace (Klik pada gambar untuk tampilan lebih besar)
Setiap operasi dalam model kontrak layanan dapat memiliki maksimum dua pesan kontrak yang terkait dengannya: satu pesan kontrak untuk pesan permintaan dan kontrak untuk satu pesan pesan respon. Anda dapat menambahkan bagian ke pesan kontrak dengan mengklik kanan di atasnya. Sebagian dapat berupa tipe primitif, seperti System.Decimal, atau kontrak data sebagaimana didefinisikan dalam data model kontrak. Elemen Model DSL Selector, ditunjukkan dalam Gambar 3, menunjukkan kontrak semua data yang tersedia dalam proyek

Gambar 3 Memilih Data Kontrak
ASMX atau WCF?
Sebelum kita beralih ke model host, kita harus terlebih dahulu membuat solusi kita struktur. Ini adalah serangkaian proyek-proyek di mana kode untuk layanan Web akan dihasilkan. Hal ini pada titik ini bahwa kita harus memilih teknologi implementasi kami. Penting untuk dicatat bahwa dalam Layanan Pabrik, dua teknologi yang sudah tersedia-ASMX dan WCF-dan mudah untuk memperpanjang Layanan Pabrik dengan teknologi layanan Anda sendiri. Demonstrasi kami, kami akan menggunakan WCF. Untuk membuat pilihan ini, kita cukup klik kanan pada solusi, dan pilihan yang ditunjukkan pada Gambar 4 akan ditampilkan. Kami pilih WCF Pelaksanaan Proyek di bagian bawah menu, dan Pabrik Layanan menciptakan beberapa proyek di mana kode yang dihasilkan dari model ini akan disimpan

Gambar 4 Solusi Buat WCF Struktur
Gambar 5 menunjukkan struktur solusi yang dihasilkan. Perhatikan bahwa berbagai proyek telah dihasilkan-ini adalah untuk membuat kode lebih mudah untuk mengelola. Kita akan kembali ke struktur solusi ini sedikit, ketika kita membahas pemetaan proyek meja.

Gambar 5 Struktur Solusi untuk Peedy's Pizza Palace
Kita juga perlu menentukan apakah kita ingin menggunakan ASMX atau WCF pada kontrak data model dan pada model kontrak layanan. Masing-masing model tersebut memiliki sifat yang disebut Penerapan Teknologi yang dapat diatur untuk ASMX, WCF, atau kustom Anda sendiri penerapan teknologi. Bila properti ini diset, banyak entitas pada model mendapatkan properti baru yang khusus untuk teknologi yang dipilih (lihat Gambar 6a). Seperti yang Anda lihat pada Gambar 6b, setelah kita telah dipilih sebagai pelaksanaan WCF teknologi, pengaturan WCF kategori ditambahkan ke jendela properti. Hal ini memungkinkan kita memilih jenis koleksi koleksi ketik PizzaOrder seharusnya.

Gambar 6a Sebelum Memilih Teknologi

Gambar 6b Setelah Memilih Teknologi

Host Model
Model host digunakan untuk model titik-titik ujung layanan Web dan klien proxy. Model ini tampak benar-benar berbeda dari dua model yang lain telah kita diskusikan sebelumnya. Pada titik ini, Anda bisa mulai model di host explorer dengan mengklik kanan pada unsur-unsur, dibandingkan dengan hanya menyeret dan menjatuhkan elemen desain ke permukaan. Dengan mengklik kanan pada host elemen model, Anda dapat menambahkan host baru dan klien baru, seperti yang ditunjukkan pada Gambar 7.


Gambar 7 Menambahkan Klien dan Host ke Host Model
Setelah menambahkan PizzaHost dan PizzaClient, penerapan teknologi untuk keduanya dapat dipilih. Kami telah memilih untuk menetapkan kedua ke WCF. Hal ini juga diperlukan untuk memilih proyek implementasi untuk keduanya. Untungnya, Layanan Pabrik telah dihasilkan tersebut bagi kita. Seperti yang Anda lihat, Tes folder dalam struktur solusi yang ditunjukkan pada Gambar 5 berisi proyek PizzaService.Host dan PizzaService.Client. Ini dapat digunakan sebagai pelaksanaan proyek.
Kami menciptakan ServiceReference baru dengan mengklik kanan pada PizzaHost. ServiceReference baru ini, kita perlu untuk memilih operator implementasi-ini adalah referensi ke model layanan kami. Kita dapat memilih pelaksanaan dengan cara yang sama data yang kami memilih kontrak pada Gambar 2.
Untuk setiap ServiceReference Anda buat, Anda dapat menetapkan berbagai endpoint. Kami telah menciptakan satu titik akhir, yang disebut PizzaEndpoint, dan telah dikonfigurasi untuk menggunakan wsHttpBinding.
Sekarang bahwa kita memiliki titik akhir, kita dapat membuat proxy untuk klien kami. Untuk menambahkan proxy baru, kita klik kanan pada PizzaClient dalam Hosti Explorer. Dengan combobox di jendela properti dari proxy, kita dapat memilih titik akhir.

Gambar 8 Lengkap Host Model untuk Layanan Pizza

Generating Kode
Layanan online Pabrik Resources
• Domain-Specific Language Tools
• Integrasi Designer Powertoy untuk Domain-Spesifik Perangkat Bahasa
• Web Service Software Factory
• Repositori Pabrik
• Enterprise Perpustakaan

Semua model yang kita butuhkan untuk layanan pemesanan pizza kami sekarang didefinisikan, dan kami siap untuk menghasilkan layanan. Untuk melakukan ini, pertama-tama kita harus mengisi tabel pemetaan proyek lapangan untuk masing-masing model-kami ini dapat didefinisikan dalam jendela properti masing-masing model. Ketika memilih properti ini, jendela pilihan akan muncul. Dalam kasus kami, hanya ada satu pilihan: PizzaService. Hal ini karena semua peran yang sudah didefinisikan ketika kita menciptakan struktur solusi. Peran dapat ditemukan dalam file projectmapping.xml, yang juga merupakan bagian dari struktur solusi kami. Dalam file ini, peran yang dapat dikaitkan dengan proyek.
Langkah berikutnya adalah untuk benar-benar menghasilkan kode. Klik kanan pada data model kontrak memberi kita Kode Menghasilkan pilihan. Memilih opsi ini menghasilkan data PizzaService.DataContracts kontrak dalam proyek. Hal yang sama dapat dilakukan untuk layanan model kontrak, yang menghasilkan kode dalam PizzaService.MessageContracts, PizzaService.ServiceContracts, dan proyek PizzaService.ServiceImplementation.
Menghasilkan kode untuk model host dilakukan dalam dua langkah: kami menghasilkan kode sekali untuk host dan sekali untuk klien. Untuk menghasilkan kode untuk tuan rumah, kita klik pada PizzaService ServiceReference dan Visual Studio perancang menyajikan sebuah tombol yang disebut Validasi Model. Ketika kita klik tombol, model divalidasi dengan benar dan kita kemudian disajikan dengan Layanan Menghasilkan tombol. Mengklik ini, karena anda sudah pasti bisa menebak sekarang, menghasilkan kode dalam proyek PizzaService.Host.
Sekarang untuk menghasilkan klien, pertama-tama kita harus menjalankan tuan rumah, jadi kami mengkompilasi proyek PizzaService.Host dan menjalankannya dalam sebuah browser Web. Selanjutnya kita klik pada tuan rumah kami PizzaProxy dalam model dan klik menghasilkan kode. Ini akan membuka wizard, yang ditunjukkan pada Gambar 9, yang memungkinkan kita untuk mengkonfigurasi klien. Sementara alamat layanan diisi secara otomatis oleh Layanan Factory, kami pergi ke depan dan menetapkan pengaturan keamanan untuk host. Sebagai contoh, jika sebuah sertifikat X.509 diperlukan dalam rangka untuk menyambung ke layanan ini, kita dapat menambahkannya ke klien dengan menggunakan wizard ini.

Gambar 9 Wizard Digunakan untuk Menghasilkan Klien (Klik gambar untuk tampilan lebih besar)
Pada titik ini, layanan siap digunakan dan dapat dipublikasikan di IIS. Logika dan entitas bisnis untuk layanan ini dapat ditambahkan ke PizzaService.BusinessEntities dan PizzaService.BusinessLogic proyek. Satu-satunya hal yang perlu kita lakukan adalah menciptakan kelas parsial baru, yang disebut PizzaServicePeedy, dalam proyek PizzaService.ServiceImplementation. Ini digunakan untuk menambah logika bisnis untuk implementasi layanan yang dihasilkan. Sayangnya, jika kita mengedit kode secara langsung, logika kita akan ditimpa waktu berikutnya kita menghasilkan kode. Tapi dengan kelas parsial, ini tidak terjadi karena generator tidak menyentuh file yang telah kita buat diri kita sendiri.
Untuk menunjukkan hal ini, kita telah mendefinisikan sebuah kelas dalam proyek PizzaService.BusinessLogic disebut PriceCalculator dengan sebuah metode yang disebut CalculatePrice. (Sangat penting untuk dicatat bahwa ini bukan praktek yang disarankan itu jauh lebih baik jika tidak logika bisnis "tahu" apa-apa tentang layanan, dan itulah sebabnya ada lapisan terjemahan. Untuk mendukung proses ini, Jasa Factory memiliki penerjemah built in yang membantu Anda menerjemahkan data Anda kontrak menjadi badan usaha. Tetapi sementara Anda mungkin tidak ingin melakukan ini dalam produksi, kami menggunakan teknik ini di sini sebagai cara sederhana untuk mengilustrasikan poin yang fundamental.) Metode ini memerlukan data PizzaOrder kontrak sebagai parameter dan mengembalikan harga pesanan. Satu-satunya hal yang perlu kita lakukan sekarang adalah merangkum harga ini dalam MessageContract dan kemudian mengembalikan MessageContract. Oleh karena itu, untuk melakukan ini kita menciptakan sebuah kelas parsial dalam proyek PizzaService.ServiceImplementation disebut PizzaServicePeedy yang menimpa OrderPizza metode yang dihasilkan oleh Layanan Factory. Kelas parsial ini ditunjukkan pada Gambar 10.
Gambar 10 PizzaServicePeedy Partial Class
namespace PizzaService.ServiceImplementation
{
public partial class PizzaServicePeedy
{
public override PizzaService.MessageContracts.OrderPizzaResp
OrderPizza(PizzaService.MessageContracts.OrderPizzaReq request)
{
PizzaService.MessageContracts.OrderPizzaResp result = new
PizzaService.MessageContracts.OrderPizzaResp();
result.price = PizzaService.BusinessLogic.PriceCalculator
.CalculatePrice(request.order);
return result;
}
}
}
Untuk menguji layanan kami, kami memulai proyek PizzaService.Host. Dalam proyek PizzaService.Client, kita dapat kemudian menentukan metode berikut ini untuk memanggil layanan:
static void Main()
{
PizzaOrder order = new PizzaOrder();
Pizza pizza = new Pizza();
pizza.PizzaSize= PizzaSize.Large;
pizza.Topping = Topping.Hawaii;
order.Add(pizza);
PizzaContractClient proxy = new PizzaContractClient();
Console.WriteLine(proxy.OrderPizza(order));
proxy.Close();
}
Ketika program dijalankan, angka 7 adalah dicetak ke jendela keluaran Visual Studio, karena ini adalah harga untuk setiap jenis pizza besar tersedia di Peedy's.

Menyesuaikan Layanan Factory
Pabrik Layanan mengotomatiskan banyak hal untuk Anda ketika membangun layanan. Tetapi bagaimana jika Anda perlu untuk melakukan hal-hal sedikit berbeda atau Anda perlu mengintegrasikan layanan ini dengan kerangka aplikasi yang sudah ada? Nah, penuh kode sumber dari Layanan Factory tersedia di situs CodePlex (www.codeplex.com / servicefactory), yang berarti Anda dapat menyesuaikan pabrik itu sendiri.
Ketika Anda melihat sumber Factory Layanan, Anda akan menemukan bahwa itu terdiri dari bagian berikut:
Domain-Spesifik Bahasa Secara khusus, ini meliputi data kontrak, perancang tuan rumah, dan layanan kontrak. Proyek-proyek ini menetapkan bagaimana bahasa pemodelan dibangun dan divisualisasikan.
Extenders extender Ada enam proyek. Proyek-proyek ini menentukan sifat-sifat tambahan yang diperlukan oleh DSLs untuk mendukung teknologi tertentu (ASMX dan WCF).
Layanan Bimbingan Pabrik Paket solusi ini berisi template dan menu konteks adat.
Perpustakaan ini berisi kode-generasi kerangka, validasi kerangka, kode-generasi strategi, dan aturan validasi.
Model Proyek Proyek kebiasaan ini berisi model.
Untuk diskusi ini, kami akan membagi penyesuaian ke dalam dua kategori: orang-orang yang mengharuskan Anda untuk membangun kembali sumber dan orang-orang yang tidak mengharuskan Anda untuk membangun kembali sumber (ekstensi). Ini diuraikan pada Gambar 11.
Gambar 11 Dua Customization Kategori
Must rebuild the factory
Changes Description
Modifying existing GAX (Guidance Animation eXtensions) recipes You must make changes to the Service Factory Guidance Package, and this, in turn, means you must rebuild your own factory.
Adding new project roles You must make changes to the Service Factory Guidance Package, and, therefore, you must rebuild your own factory.
Modifying solutions templates You must make changes to the Service Factory Guidance Package, and this, in turn, means you must rebuild your own factory.
Adding a new model You must recompile the factory since you need to make changes to the model project to support your new model.
Changing the modeling languages This requires changes to the existing DSL projects, and, therefore, you must rebuild your factory.
Do not need to rebuild the factory
Changes Description
Adding new solution templates You can simply define your solution templates in your own separate GAT guidance package.
Adding new GAX recipes You can define new GAX recipes, such as wizards and context menus, in your own GAT guidance package.
Adding new generation strategies You can add extra strategies in your own assembly using the ICodeGenerationStrategy interface from the libraries. (Technology extenders are able to use the assembly.)
Modifying text templates You can change the T4 text templates used to generate code if you want to change how code is generated. These are located in the service factory installation folder in the "Guidance Package\TextTemplates" subfolder.
Adding new model validation rules You can add extra validation rules to the ruleset.config in the Guidance Package folder of the service factory installation folder.
Adding new technology extensions or properties By default, the Service Factory ships with technology extenders for ASMX and WCF. You can add extra properties to these extenders or add your own extender in your assembly by deriving from ExtensionProviderBase. New or changed extenders can be dropped in the service factory installation folder in the "Guidance Package\Lib" subfolder.
Secara umum, Anda harus mencoba untuk menghindari kustomisasi yang mengharuskan Anda untuk membangun kembali pabrik dan membuat installer baru. Selain menjadi lebih kompleks dan berpotensi rawan kesalahan, penyesuaian jenis ini juga meningkatkan kemungkinan menghadapi masalah ketika bermigrasi ke versi berikutnya dari pabrik atau mengintegrasikan dengan produk Microsoft di masa depan. Yang mengatakan, sumber Pabrik Layanan pengaturan tidak termasuk proyek untuk membantu dengan proses membangun kembali. Proyek ini termasuk generasi kode template yang menghasilkan WIX (Windows Installer XML), membuat tugas lebih mudah dan lebih cepat.
Pada bagian berikutnya, kami akan menunjukkan kepada Anda bagaimana cara menambahkan sebuah properti yang ada extender WCF dan mengubah template untuk menghasilkan kode tambahan untuk properti baru. Ini adalah di luar cakupan kolom ini untuk memeriksa poin ekstensi lain, jadi memeriksa Layanan Extensions Pabrik Hands-on Lab, tersedia di codeplex.com / servicefactory.
Perhatikan bahwa kita memodifikasi sumber pabrik, tapi kita hanya mengubah satu pertemuan, yang dimuat secara dinamis. Dengan demikian, kita tidak membangun kembali pabrik.

Pengecualian Perpustakaan Enterprise Shielding
Di bidang jasa, biasanya untuk mencegah pengiriman pengecualian untuk klien yang tidak diketahui. The Exception Handling Application Block di Enterprise Library (EntLib) 3.1 dapat membantu dengan pengecualian dikonfigurasi menerapkan kebijakan untuk melindungi layanan WCF. Hal ini memerlukan atribut pada ExceptionShielding layanan dengan nama pengecualian kebijakan melindungi dari Exception Handling blok sebagai parameter.
Dalam Layanan Factory, seluruh kelas layanan yang dihasilkan sehingga kita dapat mengatur atribut di kode yang dihasilkan secara manual, tapi itu akan ditimpa setiap kali kita harus regenerasi kode. Sebuah solusi untuk hal ini adalah untuk memperluas model layanan dengan pengaturan untuk melindungi Exception EntLib atribut. Perhatikan bahwa pengecualian melindungi EntLib hanya bekerja dengan layanan WCF. Juga, menambah properti baru untuk Extenders tidak mengharuskan kita untuk membangun kembali seluruh pabrik.

Membangun Extension
Kami akan memodifikasi source dari pabrik, tapi kita hanya membuat perubahan pada satu majelis: kontrak layanan yang WCF active. The extender perakitan di-load secara dinamis, sehingga kita hanya perlu membangun extender berubah. Untuk membangun perluasan ini, kami menganggap bahwa Anda memiliki Pabrik Layanan biner yang diinstal dengan menggunakan installer. Anda juga perlu menginstal source karena kita akan melakukan perubahan pada bagian darinya. Anda dapat sebagian mengikuti "Petunjuk Instalasi Source Code Installer" dari Layanan Pabrik petunjuk instalasi. Anda harus melewatkan langkah-langkah di mana Anda membangun kembali seluruh solusi atau mendaftarkan Bimbingan Paket, karena itu akan membuat perubahan pada biner asli versi diinstal.
Kami akan menambah properti baru kami ke kontrak layanan WCF pills, ditemukan dalam proyek ServiceFactory.Extenders.ServiceContract.Wcf Layanan Sumber Factory. Buka saja proyek satu ini bukan seluruh solusi, karena kita hanya perlu membuat perubahan pada proyek ini. Pengecualian pengaturan melindungi properti dari layanan WCF, sehingga kita dapat menambah properti baru ke kelas WCFService (seperti yang ditunjukkan pada Gambar 12).
Gambar 12 Kode untuk Extra Properti
namespace
Microsoft.Practices.ServiceFactory.Extenders.ServiceContract.Wcf
{
[Serializable]
[CLSCompliant(false)]
[ObjectExtender(typeof(Service))]
public class WCFService : ObjectExtender
{
...

private string entLibWCFExceptionPolicy;

[Category("Enterprise Library Integration"),
Description("EntLib WCF Exception Shielding Policy"),
DisplayName("EntLib Exception Shielding Policy"),
ReadOnly(false),
Browsable(true)]
[XmlElement("EntLibWCFExceptionPolicy")]
public string EntLibWCFExceptionPolicy
{
get { return entLibWCFExceptionPolicy; }
set { entLibWCFExceptionPolicy = value; }
}
}
}
Kita juga perlu tambahan referensi ke DLL EntLib ketika kita menggunakan atribut ExceptionShielding. Kita dapat menambahkan referensi ke perakitan ServiceLink kelas, dan, dengan cara ini, proyek yang dihasilkan secara otomatis akan mengambil referensi ini:
[AssemblyReference("Microsoft.Practices.EnterpriseLibrary" +
".ExceptionHandling, Version=3.1.0.0, Culture=neutral," +
"PublicKeyToken=b03f5f7f11d50a3a")]

[AssemblyReference("Microsoft.Practices.EnterpriseLibrary" +
".ExceptionHandling.WCF, Version=3.1.0.0, Culture=neutral," +
"PublicKeyToken=b03f5f7f11d50a3a")]
Sekarang kita harus mengubah kode-generasi template untuk menghasilkan kode tambahan untuk properti baru. Template untuk menghasilkan kode WCF dalam Bimbingan Paket \ TextTemplates \ WCF \ CS subfolder dari folder instalasi Pabrik Layanan.
Kita akan menambahkan kode ke file ServiceImplementation.tt. Menyimpan salinan file asli pertama jika anda ingin beralih kembali ke template yang asli. Pada bagian bawah file ServiceImplementation.tt, kita menambahkan metode berikut, yang mengembalikan EntLib kebijakan pengecualian hanya jika nilai penuh dalam:
private string
GetEntLibExceptionShieldingPolicy(
Service service)
{
WCFService wfcService =
GetObjectExtender(service);

if(string.IsNullOrEmpty(
wfcService.EntLibWCFExceptionPolicy))
{
return string.Empty;
}
else
{
return "[ExceptionShielding(\"" +
wfcService.EntLibWCFExceptionPolicy +
"\")]";
}
}
Untuk menyelesaikan perpanjangan kita, kita juga perlu untuk memasukkan pernyataan untuk menggunakan namespace dan EntLib panggilan ke metode yang diciptakan sebelumnya tepat di atas dasar definisi kelas, seperti yang ditunjukkan di sini:
using System;
using WCF = global::System.ServiceModel;
using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF;

namespace <#=CurrentExtender.ArtifactLink.Namespace#>
{
///
/// Service Class - <#= CurrentElement.Name #>
///

[WCF::ServiceBehavior(Name = "<#= CurrentElement.Name #>", ...
<#= GetEntLibExceptionShieldingPolicy(CurrentElement) #>
public abstract class <#= CurrentElement.Name #>Base...
...
}
Menggunakan Extension
Untuk menggunakan ekstensi, kita hanya perlu untuk membangun kembali proyek ServiceFactory.Extenders.ServiceContract.Wcf berubah dan pastikan layanan yang diinstal pabrik load secara dinamis berubah WCF kami extender perakitan. Tapi kita harus memperingatkan Anda: jangan membangun kembali seluruh kode sumber dari Layanan Pabrik pada saat ini; ini akan membuat perubahan pada versi diinstal biner. Hanya membangun kembali proyek active.
Sekali lagi, ini adalah praktik yang baik untuk menyimpan salinan extender asli. (Yang asli extender Microsoft.Practices.ServiceFactory.Extenders.ServiceContract.Wcf.dll WCF dapat ditemukan dalam Bimbingan Paket \ Lib subfolder dari folder instalasi Pabrik Layanan.) Sekarang kita menutup semua kasus dari Visual Studio dan menimpa extender DLL dengan versi kita sendiri. Lalu ketika kita restart Visual Studio dan menciptakan layanan baru yang menggunakan WCF Extension, properti kami yang baru muncul ketika layanan yang dipilih (lihat Gambar 13).

Gambar 13 New EntLib Properti dalam Layanan (Klik gambar untuk tampilan lebih besar)
Ketika kita mengisi kebijakan pengecualian dan menghasilkan kode, hak majelis EntLib ditambahkan ke proyek yang dihasilkan. Di samping itu, pernyataan dan menggunakan atribut EntLib ditambahkan ke layanan kelas implementasi. Tentu saja, sekarang menambahkan atribut kita tidak tersesat ketika regenerasi karena kita mengubah kode-generasi bukannya template kode yang dihasilkan. Kode layanan baru terlihat seperti ini:
using System;
using WCF = global::System.ServiceModel;
using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF;

namespace WCFService1.ServiceImplementation
{
///
/// Service Class - Service1
///

[WCF::ServiceBehavior(Name = "Service1", ...
[ExceptionShielding("MyExceptionPolicy")]
public abstract class Service1Base :
WCFService1.ServiceContracts.IServiceContract1
{
...
}
}
Dalam rangka untuk benar-benar mendapatkan pengecualian melindungi EntLib bekerja, kita juga harus mengkonfigurasi sebuah Exception Handling Application Block dengan kebijakan melindungi pengecualian. Anda bisa merujuk ke dokumentasi EntLib untuk detail lebih lanjut tentang cara membuat kebijakan penanganan pengecualian.
Untuk perpanjangan ini, kami menambahkan sebuah properti yang ada extender WCF, mengatakan kepada extender bahwa kami perlu tambahan referensi perakitan, mengubah template untuk menghasilkan kode yang benar untuk properti baru, dan membuat Pabrik Layanan menggunakan WCF berubah extender. Sifat kebijakan mendatang titik ekstensi akan membuat perluasan jenis ini lebih mudah dengan memungkinkan Anda untuk menentukan properti baru di majelis terpisah. Dengan cara ini, maka tidak perlu untuk membuat perubahan pada Extenders yang ada.