前言:
有A网站,B网站两个网站独立运行。某一天,需要两个网站进行合作来完成一件事,比如用A网站接收一些数据进行处理,存入中转数据库,B网站定时去取数据进入自己的系统进行处理。
可能我们会先想到在B网站做一个功能,定时去数据库取。但是如果我没有B网站的源代码只有开发文档呢。这时候可以用一个简单的winform程序来做。然而从中转数据库取数据容易,存到B网站自己的数据库难。为什么呢,因为数据要经过B网站的一些方法处理。这个时候,就用到了在winform程序中引用webservice的情景。
首先,vs2013创建一个winform程序。添加最基本的控件。一个button用来触发事件,一个label用来显示事件结果。
在解决方案资源管理器上点击右键,选择添加服务引用。
弹出框中,填写你要引入的服务。这里拿网上的一个天气预报的服务作实验。地址:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx,点击转到
如果服务地址正确,能找到服务,会弹出下面的框
命名空间可以随意命名,点击确定,可以看到我们的资源面板变成了这样子。
这个服务有什么方法呢。如果是你自己的服务,那么你肯定知道,如果是公共服务,可以在浏览器输入服务地址,看一下有哪些方法:
嗯。好了,就用它了。进入程序测试。
private void button1_Click(object sender, EventArgs e) { WeatherServiceTest.WeatherWebServiceSoapClient client=new WeatherServiceTest.WeatherWebServiceSoapClient(); string[] province = client.getSupportProvince(); for (int i = 0; i < province.Length;i++ ) { this.label1.Text += " " + province[i]; } }
执行!点击button,结果报错如下:
可以清楚地看到,多个终点配置。打开app.config
可以清楚地看到,确实有两个终点配置。我们需要删除一个。那么这里删除哪一个呢。我们看到,这里程序默认给生成了两个binding,两个对应的endpoint。一个是basic基本的,一个是custom自定义的。然后我们可以看到,两个终点配置其实就是soap的协议不一样而已。其实删除哪一个都可以,这里我们保留basic,删除custom。(custom的binding可删可不删。为了保持整洁,没有多余的干扰项,我们也删除了)。删除后如下:
再次运行。
成功!!!
提醒:在一个应用中可以添加多个服务引用,但是每次添加的时候会相应添加两个binding和对应的endpoint,去掉其中一个即可。其他的和上述一样。