前言:
有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 += "\n" + province[i]; } }
執行!點擊button,結果報錯如下:
可以清楚地看到,多個終點配置。打開app.config
可以清楚地看到,確實有兩個終點配置。我們需要刪除一個。那么這里刪除哪一個呢。我們看到,這里程序默認給生成了兩個binding,兩個對應的endpoint。一個是basic基本的,一個是custom自定義的。然后我們可以看到,兩個終點配置其實就是soap的協議不一樣而已。其實刪除哪一個都可以,這里我們保留basic,刪除custom。(custom的binding可刪可不刪。為了保持整潔,沒有多余的干擾項,我們也刪除了)。刪除后如下:
再次運行。
成功!!!
提醒:在一個應用中可以添加多個服務引用,但是每次添加的時候會相應添加兩個binding和對應的endpoint,去掉其中一個即可。其他的和上述一樣。