WCF SOA服务应用
WCF是微软官方推出的一个基于服务的整合框架,它整合了以前的Web Service、MSMQ、Remoting等通信技术,通过灵活的配置,让服务编程更加容易、可扩展。这篇文章主要目的就是带领大家从开发到测试到部署到调用WCF服务应用,让大家对其有个整体上的了解。
一、建立一个WCF应用程序
我们给这个WCF应用程序起名为WeatherWcfService,并添加天气预报的WebService引用。
我们选择http://www.webxml.com.cn/zh_cn/weather_icon.aspx 这个地址的Web服务作为我们的天气预报的Web服务的提供者。
复制Endpoint中的url地址。
如图所示,添加服务引用。
将web服务的url粘贴到地址栏,点击转到按钮,等待服务加载后点击确定按钮。
通过该项目的Web.config配置文件可以看到多了以下配置。
<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接口中添加契约。
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value); [OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite); // TODO: 在此添加您的服务操作 [OperationContract]
string[] GetWeather(string cityName);
}
然后在Service1.svc文件中实现新添加的接口。
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测试工具会自动加载。
你也可以直接到VS的安装目录找到这个测试工具,比如我的目录为:D:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE
双击GetWeather()方法,填入测试值,点击调用按钮即可。
会看到我们已经收到了想要的天气预报数据。
四、发布WCF服务到IIS
由于我使用的是IIS8.0版本。在用VS2012发布WCF项目到指定目录后,并不能直接浏览svc(服务),需要在IIS里面进行一些设置。
1、添加设置MIME类型
2、添加设置处理程序映射
配置好之后,在浏览器浏览一下这个WCF服务。我的URL为:http://192.168.0.2/wcf/Service1.svc,如果能正常打开,说明WCF服务已经在IIS寄宿成功。
五、编写调用这个WCF客户端代码
首先建立一个控制台项目。
其次添加服务的引用。跟上面WCF添加WebService服务引用一样,这里还是先添加服务引用,地址为:http://192.168.0.2/wcf/Service1.svc(这是我本地发布到IIS的WCF服务地址)。
然后我们在Main函数填入如下代码:
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);
}
}
}
可以看到,我们通过客户端调用WCF服务,获得了互联网提供的WebService天气预报的服务。
读者可以自行进一步处理以上获得的数据,在Web或者App(IOS、Android、Windows Phone等)中提供一个天气预报查询的应用。天气预报的图标可以自行到网站上面下载。
WCF SOA服务应用的更多相关文章
- SOA服务设计与实现的几个语言无关的原则速记
一.SOA定义 SOA即面向服务架构(Service-Oriented Architecture).在SOA中,一切皆服务.一个服务是通过消息交换来调用的程序,一个信息系统是共同完成一个特定任务的一组 ...
- 简述我的SOA服务治理
SOA服务治理 1.解决业务部门服务冲突和纠纷2.版本定义与版本管理3.服务备案与服务管理4.业务监督与服务监控 SOA的战略目的 一.业务价值胜过技术策略 二.战略目标胜过具体项目的效益 三.内置的 ...
- 如何:加载分页结果(WCF 数据服务)
WCF 数据服务 允许数据服务限制单个响应源中返回的实体数.在此情况下,源中的最后一项包含指向下一页数据的链接.通过调用执行 DataServiceQuery 时返回的 QueryOperationR ...
- 微软开源 WCF 分布式服务框架,并入 .NET 基金会项目
微软北京时间2015.5.20 在其 .NET Foundation GitHub 开源项目页中开放了 WCF 分布式服务框架的代码.WCF突然之间成为一个热门话题,在各大网站上都有不同的报道:dot ...
- 一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例)
JSONP(JSON with Padding)可以看成是JSON的一种“使用模式”,用以解决“跨域访问”的问题,这篇简单的文章给出一个简单的例子用于模拟如何通过jQuery以JSONP的访问调用一个 ...
- WCF服务与WCF数据服务的区别
问: Hi, I am newbie to wcf programming and a little bit confused between WCF Service and WCF Data Se ...
- WCF 数据服务 4.5
.NET Framework 4.5 其他版本 WCF 数据服务(以前称为"ADO.NET Data Services")是 .NET Framework 的一个组件.可以使用此组 ...
- IIS上发布WCF发布服务,访问不到
1 环境是IIS7,发布WCF发布服务,访问不到. 一种原因站点自动生成“程序应用池”和站点的Framwork版本不一致. 解决的办法:新建一个“程序应用池”,然后站点指向这个新建的“程序应用池”
- 使用多种客户端消费WCF RestFul服务(四)——Jquery篇
Jquery篇 互联网开发中少不了各类前端开发框架,其中JQUERY就是最流行之一,本篇我们就采用JQUERY来消费WCF RestFul服务,其中用到JSON基础知识,如果有想了解的朋友,请访问:& ...
随机推荐
- 【原创】OllyDBG 入门系列(一)-认识OllyDBG
****** http://blog.fishc.com/645.html 标 题: [原创]OllyDBG 入门系列(一)-认识OllyDBG作 者: CCDebuger时 间: 2006-0 ...
- 学习Java设计模式的10条建议
设计模式在整个Java的学习路线图中扮演着承上启下的作用. 在整个软件生命周期中,唯一不变的就是变化.设计模式就是要在软件设计.编码中对现有问题的一种总结,并从中寻求应对变化的策略. 自己初次接触设计 ...
- Spring 从零開始-03
这里说说bean装配集合.spring的支持的集合元素,其基本使用方式如同与Java的集合,所以假设对Java的集合不太了解的能够先找个帖子好好学习一下, 时间关系这里就不说了. ~~ list的样例 ...
- OpenCV 读取.xml文件
OpenCV 只提供了读取和存储.xml和.yml 文件格式的函数. 读取.xml文件的C++例程如下: cv::FileStorage fs; //OpenCV 读XML文件流 cv::Mat De ...
- 一个响应式数据库框架SQLBrite,完美解决数据库和UI的同步更新!
相信小伙伴们在开发中或多或少都可能遇到过这样的问题:打开一个应用后,为了快速响应,先将数据库中的数据呈现给用户,然后再去网络上请求数据,请求成功之后将数据缓存至数据库,同时更新UI,但是我们经常会这样 ...
- 可扩展的listview--Expandablelistview
layout.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" x ...
- jquery checkbox的判断和设置方法
jquery的操作复选框偶尔能用到,每次都是百度去查,不得不说现在百度的搜索真的很垃圾,好多特别老的文章都排在前面,想要甄别出有用的东西挺费劲.脑子又记不住这么多东西,好记性不如烂笔头,还是记下来吧 ...
- winform 上传
public class ImitateSelectFile { public void Select(HtmlElement htmlEle, string fileFullPath) { html ...
- 浅谈用java解析xml文档(四)
继续接上一文,这一阵子因为公司项目加紧,导致最后一个解析xml文档的方式,还没有总结,下面总结使用dom4J解析xml. DOM4J(Document Object Model for Java) 使 ...
- 在 Transact-SQL 中使用 TRY...CATCH
在 Transact-SQL 中使用 TRY...CATCH (注:本文来自于 http://msdn.microsoft.com/zh-cn/library/ms179296.aspx) ...