WCF动态创建代码正确实现方法分析

开发 开发工具
我们在这篇文章中,通过一个简单的代码示例来为大家详细介绍了WCF动态创建代码的实现方法,相信朋友们可以从中获得一些帮助。

WCF是一个使用托管代码以及面向服务的统一的应用框架。那么它的出现,给开发人员带来了非常大的好处。在这里我们就先来给大家介绍一种比较简单的应用技巧,WCF动态创建代码的相关实现方法。

目标服务原型

  1. [ServiceContract]  
  2. public interface ICalculate  
  3. {  
  4. [OperationContract]  
  5. double Add(double a, double b);  
  6. }  
  7. public class CalculateService : ICalculate  
  8. {  
  9. public double Add(double a, double b)  
  10. {  
  11. return a + b;  
  12. }  

服务器代码

  1. ServiceHost host = new ServiceHost(typeof(CalculateService));  
  2. host.AddServiceEndpoint(typeof(ICalculate), new BasicHttpBinding(),
     "http://localhost:8080/calc");  
  3. ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();  
  4. behavior.HttpGetEnabled = true;  
  5. behavior.HttpGetUrl = new Uri("http://localhost:8080/calc");  
  6. host.Description.Behaviors.Add(behavior);  
  7. host.Open(); 

我们创建了一个 ServiceMetadataBehavior,只有这样我们才能获得 WSDL / MetaData。

WCF动态创建代码:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4. using System.CodeDom;  
  5. using System.CodeDom.Compiler;  
  6. using System.IO;  
  7. using System.Reflection;  
  8. using System.ServiceModel;  
  9. using System.ServiceModel.Channels;  
  10. using System.ServiceModel.Description;  
  11. Uri uri = new Uri("http://localhost:8080/calc");  
  12. MetadataExchangeClient client = new MetadataExchangeClient
    (uri, MetadataExchangeClientMode.HttpGet);  
  13. MetadataSet metadata = client.GetMetadata();  
  14. WsdlImporter importer = new WsdlImporter(metadata);  
  15. CodeCompileUnit ccu = new CodeCompileUnit();  
  16. CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");  
  17. ServiceContractGenerator generator = new ServiceContractGenerator(ccu);  
  18. foreach (ContractDescription description in importer.ImportAllContracts())  
  19. {  
  20. generator.GenerateServiceContractType(description);  
  21. }  
  22. StringWriter writer = new StringWriter();  
  23. provider.GenerateCodeFromCompileUnit(ccu, writer, null);  
  24. string code = writer.ToString();  
  25. File.WriteAllText("proxy.cs", code, Encoding.Default); 

运行上述代码后,打开 proxy.cs,你看到了什么?好了,把这个文件加到客户端项目中去就完成了WCF动态创建代码的操作。

【编辑推荐】

  1. WCF tcpTrace实现功能浅析
  2. WCF单向协定基本创建步骤解析
  3. WCF返回自定义格式具体应用技巧详解
  4. WCF响应服务基本应用技巧分享
  5. WCF排队调用由NetMsmqBinding支持
责任编辑:曹凯 来源: 博客园
相关推荐

2010-02-26 11:22:16

LitwareHR使用

2010-02-25 09:13:34

WCF异步调用

2010-02-25 16:52:12

引用WCF服务

2010-02-25 10:10:29

WCF使用Header

2010-02-26 08:59:10

WCF服务宿主程序

2010-02-24 10:07:48

WCF跨越边界

2009-12-21 10:09:26

WCF创建客户端服务对

2010-02-24 13:48:44

MSMQ使用WCF

2010-02-24 10:41:28

WCF服务保护

2010-01-22 13:08:50

VB.NET创建数组

2010-02-26 10:30:03

ASP.NET Aja

2010-03-04 11:12:02

Python AOP

2010-02-22 14:28:35

WCF实现loadin

2010-03-03 17:10:57

Python操作Sql

2010-01-06 15:56:18

.Net Framew

2009-12-15 14:09:39

Ruby创建可参数化类

2010-03-05 16:51:01

Python程序转为E

2009-12-08 14:10:55

Silverlight

2010-05-10 16:25:15

Oracle组件

2010-03-04 15:12:33

Python算法
点赞
收藏

51CTO技术栈公众号