WCF学习笔记(二):简单调用

简介:

一个通信会话过程有两个部分组成,客户端和服务端,他们要进行会话就必然有共同的语言约定,在WCF中这称为契约(contract),定义好通信的约定后,服务端需要确定服务的具体内容,即为配置、运行服务、开放终结点。客户端描述如何从 WCF 服务检索用于创建 WCF 客户端的元数据。

第一、建立契约 

代码
using  System;
using  System.ServiceModel;
 
namespace  Microsoft.ServiceModel.Samples
{
  ServiceContract(Namespace 
=  “http: // wengyuli”)] 
   public   interface  ICalculator
  {
     [OperationContract]
     
double  Add( double  n1,  double  n2);
   }
}

 

第二、实现契约

public   class  CalculatorService : ICalculator
{
    
public   double  Add( double  n1,  double  n2)
   {
      
double  result  =  n1  +  n2;
      
return  result;
    }
}

 

第三、发布服务 

代码
static   void  Main( string [] args)

        {

            Uri baseAddress 
=   new  Uri( " http://localhost:8000/wengyuli/Service " );

            ServiceHost serviceHost 
=   new  ServiceHost( typeof (CalculatorService), baseAddress);

            
try

            {

                serviceHost.AddServiceEndpoint(
typeof (ICalculator),  new  WSHttpBinding(),  " CalculatorService " );

                ServiceMetadataBehavior smb 
=   new  ServiceMetadataBehavior();

                smb.HttpGetEnabled 
=   true ;

                serviceHost.Description.Behaviors.Add(smb);

                serviceHost.Open();

                Console.WriteLine(
" The service is ready. " );

                Console.WriteLine(
" Press <ENTER> to terminate service. " );

                Console.WriteLine();

                Console.ReadLine();

                serviceHost.Close();

            }

            
catch  (CommunicationException ce)

            {

                Console.WriteLine(
" An exception occured: {0} " , ce.Message);

                serviceHost.Abort();

            }

        }

 

第四、调用服务

代码
static   void  Main( string [] args)

        {

            
// Create an instance of the WCF Client.

            System.ServiceModel.EndpointAddress epAddress 
=   new  EndpointAddress( " http://localhost:8000/wengyuli/Service/CalculatorService " );

            CalculatorClient client 
=   new  CalculatorClient( new  WSHttpBinding(), epAddress);

            
int  value1  =   2 ;

            
int  value2  =   5 ;

            
int  result  =  client.Add(value1, value2);

            Console.WriteLine(
" Add({0},{1}) = {2} " , value1, value2, result);

            client.Close();

            Console.WriteLine();

            Console.WriteLine(
" Press <ENTER> to terminate client. " );

            Console.ReadLine();

        }

 

     本文转自wengyuli 51CTO博客,原文链接:http://blog.51cto.com/wengyuli/588598,如需转载请自行联系原作者





相关文章
|
Windows 数据格式 XML
WCF学习笔记
http://www.cnblogs.com/zhucl1006/archive/2008/01/16/1042092.html 最近一直忙着工作上的事,一直也没有给自己好好充充电了,突然感觉没有了灵感,唉~~ 最近到微软的网站去看看了,发现WCF这个技术,之前就知道有这个东西了,但是一直也没有具体的看进去。
846 0
silverlight:wcf双工通讯学习笔记
一直觉得SL中的wcf双工通讯方式有点鸡肋,如果是以http方式实现则效率太低,如果用SL4中的tcp方式实现,又跟socket太雷同,所以一直没去研究,不过这东西在对性能要求不高时(比如在网页上每5分钟更新一次天气预报/股票信息),实现起来还是蛮方便的.wcf双工通讯与传统的wcf相比,最大的区别就是:传统的wcf通常都是客户端去调服务,即客户端从服务端上“拉”信息,而双工通讯除了允许客户端从服务端"拉"信息外,服务端还能主动向客户端“推”送信息。
1018 0
|
JSON JavaScript 前端开发
ExtJs学习笔记(20)-利用ExtJs的Ajax与服务端WCF交互
ExtJs是一套非常不错的javascript UI库(第一次接触ExtJs的,可到官方网站http://www.extjs.com/deploy/dev/examples/samples.html看下示例。
1146 0
|
SQL JavaScript 前端开发
ExtJs学习笔记(21)-使用XTemplate结合WCF显示数据
个人认为,XTemplate是ExtJs中最灵活的用来显示数据的组件,有点类似aspx中的Repeater控件,显示数据的模板完全可以由用户以html方式来定制.   先给一个官方的静态示例(稍微改了下),代码并不复杂,关键的地方,我已经注释了  1     2        Ext.
1075 0
|
JSON JavaScript 前端开发
ExtJs学习笔记(22)-XTemplate + WCF 打造无刷新数据分页
ExtJs的Grid组件虽然不管从哪一方面来讲,都称得上是很好很强大,但是总会有一些应用场景并不需要这么多功能,比如网站的留言列表,开发者只想要一个简单的或列表而已,这时候XTemplate就显得很有用了。
1312 0
|
JSON 前端开发 JavaScript
ExtJs学习笔记(23)-ScriptTagProxy+XTemplate+WCF跨域取数据
ajax应用中跨域一直是一个非常麻烦的问题,目前也有一些解决办法,但要么比较麻烦,要么就不具备通用性,幸好ExtJs里的ScriptTagProxy提供了跨域读取数据的功能,而且在几大浏览器上都可以正常运行,但在使用过程中要注意几点: 1.
1183 0
|
前端开发
WCF更新服务引用报错的原因之一
WCF更新服务引用报错的原因之一