WCF動(dòng)態(tài)創(chuàng)建代碼正確實(shí)現(xiàn)方法分析
WCF是一個(gè)使用托管代碼以及面向服務(wù)的統(tǒng)一的應(yīng)用框架。那么它的出現(xiàn),給開發(fā)人員帶來(lái)了非常大的好處。在這里我們就先來(lái)給大家介紹一種比較簡(jiǎn)單的應(yīng)用技巧,WCF動(dòng)態(tài)創(chuàng)建代碼的相關(guān)實(shí)現(xiàn)方法。
目標(biāo)服務(wù)原型
- [ServiceContract]
- public interface ICalculate
- {
- [OperationContract]
- double Add(double a, double b);
- }
- public class CalculateService : ICalculate
- {
- public double Add(double a, double b)
- {
- return a + b;
- }
- }
服務(wù)器代碼
- ServiceHost host = new ServiceHost(typeof(CalculateService));
- host.AddServiceEndpoint(typeof(ICalculate), new BasicHttpBinding(),
"http://localhost:8080/calc");- ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
- behavior.HttpGetEnabled = true;
- behavior.HttpGetUrl = new Uri("http://localhost:8080/calc");
- host.Description.Behaviors.Add(behavior);
- host.Open();
我們創(chuàng)建了一個(gè) ServiceMetadataBehavior,只有這樣我們才能獲得 WSDL / MetaData。
WCF動(dòng)態(tài)創(chuàng)建代碼:
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.CodeDom;
- using System.CodeDom.Compiler;
- using System.IO;
- using System.Reflection;
- using System.ServiceModel;
- using System.ServiceModel.Channels;
- using System.ServiceModel.Description;
- Uri uri = new Uri("http://localhost:8080/calc");
- MetadataExchangeClient client = new MetadataExchangeClient
(uri, MetadataExchangeClientMode.HttpGet);- MetadataSet metadata = client.GetMetadata();
- WsdlImporter importer = new WsdlImporter(metadata);
- CodeCompileUnit ccu = new CodeCompileUnit();
- CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
- ServiceContractGenerator generator = new ServiceContractGenerator(ccu);
- foreach (ContractDescription description in importer.ImportAllContracts())
- {
- generator.GenerateServiceContractType(description);
- }
- StringWriter writer = new StringWriter();
- provider.GenerateCodeFromCompileUnit(ccu, writer, null);
- string code = writer.ToString();
- File.WriteAllText("proxy.cs", code, Encoding.Default);
運(yùn)行上述代碼后,打開 proxy.cs,你看到了什么?好了,把這個(gè)文件加到客戶端項(xiàng)目中去就完成了WCF動(dòng)態(tài)創(chuàng)建代碼的操作。
【編輯推薦】