WCF SOA服务应用

简介:

WCF是微软官方推出的一个基于服务的整合框架,它整合了以前的Web Service、MSMQ、Remoting等通信技术,通过灵活的配置,让服务编程更加容易、可扩展。这篇文章主要目的就是带领大家从开发到测试到部署到调用WCF服务应用,让大家对其有个整体上的了解。

一、建立一个WCF应用程序

我们给这个WCF应用程序起名为WeatherWcfService,并添加天气预报的WebService引用。

我们选择http://www.webxml.com.cn/zh_cn/weather_icon.aspx 这个地址的Web服务作为我们的天气预报的Web服务的提供者。

Center

复制Endpoint中的url地址。

Center

如图所示,添加服务引用。

Center

将web服务的url粘贴到地址栏,点击转到按钮,等待服务加载后点击确定按钮。

通过该项目的Web.config配置文件可以看到多了以下配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
< system.serviceModel >
     < bindings >
       < basicHttpBinding >
         < binding  name = "WeatherWSSoap"  />
       </ basicHttpBinding >
       < customBinding >
         < binding  name = "WeatherWSSoap12" >
           < textMessageEncoding  messageVersion = "Soap12"  />
           < httpTransport  />
         </ binding >
       </ customBinding >
     </ bindings >
     < client >
       < endpoint  address = "http://www.webxml.com.cn/WebServices/WeatherWS.asmx"
         binding = "basicHttpBinding"  bindingConfiguration = "WeatherWSSoap"
         contract = "ServiceReference1.WeatherWSSoap"  name = "WeatherWSSoap"  />
       < endpoint  address = "http://www.webxml.com.cn/WebServices/WeatherWS.asmx"
         binding = "customBinding"  bindingConfiguration = "WeatherWSSoap12"
         contract = "ServiceReference1.WeatherWSSoap"  name = "WeatherWSSoap12"  />
     </ client >
     < behaviors >
       < serviceBehaviors >
         < behavior >
           <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
           < serviceMetadata  httpGetEnabled = "true"  httpsGetEnabled = "true" />
           <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
           < serviceDebug  includeExceptionDetailInFaults = "false" />
         </ behavior >
       </ serviceBehaviors >
     </ behaviors >
     < protocolMapping >
         < add  binding = "basicHttpsBinding"  scheme = "https"  />
     </ protocolMapping >   
     < serviceHostingEnvironment  aspNetCompatibilityEnabled = "true"  multipleSiteBindingsEnabled = "true"  />
   </ system.serviceModel >

可以看到,WCF把服务的一些要素配置在config文件里,比如这里面有两个终结点(endpoint)以及各自的三要素(地址:address;绑定:binding;契约:contract)。

二、编写WCF服务端代码

根据提供天气预报Web服务的网站的文档说明,我们可以通过GetWeather方法获得天气预报信息。

首先在IService1.cs文件的IService1接口中添加契约。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[ServiceContract]
    public  interface  IService1
    {
        [OperationContract]
        string  GetData( int  value);
                     
        [OperationContract]
        CompositeType GetDataUsingDataContract(CompositeType composite);
                     
        // TODO: 在此添加您的服务操作
                     
        [OperationContract]
        string [] GetWeather( string  cityName);
    }

然后在Service1.svc文件中实现新添加的接口。

1
2
3
4
5
6
7
8
9
10
11
public  string [] GetWeather( string  cityName)
{
     using  (ChannelFactory<ServiceReference1.WeatherWSSoap> channelFactory =  new  ChannelFactory<ServiceReference1.WeatherWSSoap>( "WeatherWSSoap" ))
     {
         ServiceReference1.WeatherWSSoap service = channelFactory.CreateChannel();
         using  (service  as  IDisposable)
         {
             return  service.getWeather(cityName,  string .Empty);
         }
     }
}

这样一个提供天气预报的WCF服务就写好了,我们用测试工具测试一下。


三、WCF服务测试

微软官方为我们准备好了一个测试WCF服务的客户端工具,我们点击项目的svc文件,运行项目(Ctrl+F5),WCF测试工具会自动加载。

Center

你也可以直接到VS的安装目录找到这个测试工具,比如我的目录为:D:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE

双击GetWeather()方法,填入测试值,点击调用按钮即可。

Center

会看到我们已经收到了想要的天气预报数据。

四、发布WCF服务到IIS

由于我使用的是IIS8.0版本。在用VS2012发布WCF项目到指定目录后,并不能直接浏览svc(服务),需要在IIS里面进行一些设置。

Center

1、添加设置MIME类型

Center

2、添加设置处理程序映射

Center

配置好之后,在浏览器浏览一下这个WCF服务。我的URL为:http://192.168.0.2/wcf/Service1.svc,如果能正常打开,说明WCF服务已经在IIS寄宿成功。

Center

五、编写调用这个WCF客户端代码

首先建立一个控制台项目。

其次添加服务的引用。跟上面WCF添加WebService服务引用一样,这里还是先添加服务引用,地址为:http://192.168.0.2/wcf/Service1.svc(这是我本地发布到IIS的WCF服务地址)。

然后我们在Main函数填入如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
using  (ChannelFactory<ServiceReference1.IService1> channelFactory =  new  ChannelFactory<ServiceReference1.IService1>( "BasicHttpBinding_IService1" ))
{
     ServiceReference1.IService1 service = channelFactory.CreateChannel();
     using  (service  as  IDisposable)
     {
         string  [] values = service.GetWeather( "北京" );
         foreach  ( var  item  in  values)
         {
             Console.WriteLine(item);
         }
     }
}

Center

可以看到,我们通过客户端调用WCF服务,获得了互联网提供的WebService天气预报的服务。

读者可以自行进一步处理以上获得的数据,在Web或者App(IOS、Android、Windows Phone等)中提供一个天气预报查询的应用。天气预报的图标可以自行到网站上面下载。




本文转自 guwei4037  51CTO博客,原文链接:http://blog.51cto.com/csharper/1362435

相关文章
|
前端开发
WCF更新服务引用报错的原因之一
WCF更新服务引用报错的原因之一
|
C# 数据安全/隐私保护
c#如何创建WCF服务到发布(SqlServer版已经验证)
c#如何创建WCF服务到发布(SqlServer版已经验证)
73 0
|
安全 数据库连接 数据库
WCF服务创建到发布(SqlServer版)
在本示例开始之前,让我们先来了解一下什么是wcf? wcf有哪些特点? wcf是一个面向服务编程的综合分层架构。该架构的项层为服务模型层。 使用户用最少的时间和精力建立自己的软件产品和外界通信的模型。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案。且能与已有系统兼容写作。 简单概括就是:一组数据通信的应用程序开发接口。
107 0
|
C++
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
138 0
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
WCF使用纯代码的方式进行服务寄宿
服务寄宿的目的是为了开启一个进程,为WCF服务提供一个运行的环境。通过为服务添加一个或者多个终结点,使之暴露给潜在的服务消费,服务消费者通过匹配的终结点对该服务进行调用,除去上面的两种寄宿方式,还可以以纯代码的方式实现服务的寄宿工作。
891 0
|
Windows
WCF服务寄宿到IIS
一.WCF简介: Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术。
1095 0
WCF服务自我寄宿
WCF服务的寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以寄宿在各种进程之中,常见的寄宿有: IIS服务、Windows服务、Winform程序、控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者方便、高效提供服务调用。
1033 0
|
网络架构
(纯代码)快速创建wcf rest 服务
因为有一个小工具需要和其它的业务对接数据,所以就试一下看能不能弄一个无需配置快速对接的方法出来,百(以)度(讹)过(传)后(讹),最后还是对照wcf配置对象调试出来了: 1.创建WebHttpBinding 2.
1011 0