[.NET]分享使用Web Service介接的方式

最近同事在呼叫客戶做的Web Service時,居然出現「伺服器無法辦認HTTP標頭SOAPAction的值」的錯誤,到底是什麼原因造成的呢?

有時不同AP之間的介接會使用Web Service的方式,而專案在使用Web Service時,就直接加入Web參考就可以了!

通常URL會先用測試機的,然而上到正式機的話,要修改URL。

最近同事在呼叫客戶做的Web Service時,居然出現如下的錯誤,

<StatusDesc>
伺服器無法辦認HTTP標頭SOAPAction的值:

http://tempuri.org/IsMember/Service1/GetMobile。
</StatusDesc>

 

詢問之下才知道,公司去模擬客戶的Web Service是自已依客戶文件上寫出來的,不是直接使用客戶Web Service的WSDL。

所以問題來了,一般我們自已新增一個Web Service時,預設的namespace會是tempuri.org開頭(相信很多開發者都不會更改它吧吐舌頭)。

而客戶自已寫的Web Service有去改namespace,所以當我們將程式拿到客戶端去執行時,就會出現「伺服器無法辦認HTTP標頭SOAPAction的值」的錯誤。

之前他們的解法是在上到客戶環境時,再重新加入參考(這樣namespace就一樣了!)。

不過,這樣不就每次要更新程式時,都要過去重加參考然後再重Build? 要是客戶的環境無法給我們的開發機連要怎麼辦呢?

……

以下是筆者的做法,

1.請客戶將Web Service提供出來(可以是個空殼程式),可以讓我們可以從公司就連接到。然後開發機就可以直接加入參考使用(一般不太可能)。

2.1.請客戶將Web Service的WSDL提供給我們,或是過去時自已產生也可以(如果是.NET開發的是在asmx?wsdl就會產生出來,然後存成xml檔),如下圖,

image

image

image

 

2.2.在公司開發環境建立一個虛擬目錄,然後將上面的xml放到該目錄去,並測試是否透過IE是否能連接到xml,如下圖,(可省略)

image

image

 

2.3.專案的Web參考URL就設定連到那個目錄去,如下圖,

image

 

2013/08/29 10:49 修改加入Web參考的方式,

在2.2的Step可以省略,因為在2.3的Step中的URL可以直接輸入Local的一個WSDL xml檔案的Path(如:H:\CustProdWS\CustService.xml),所以就不需要建立虛擬目錄了,如下,

image

 

 

這樣開發的Web Service就跟客戶的一樣了(Web參考的namespace一定要跟客戶的相同哦!)。

而更新程式時,只需要動態指定URL就可以了(一般會將url設定在config中,所以上程式時,只需要再更改要連接Web Service的URL即可)。

註:如果在公司的開發環境一定需要有一個測試的Web Service呢? 要如何確保自已寫的跟客戶的一模一樣呢? 可參考「分享使用Web Service介接的方式(II)」中的說明哦!

 

參考資料

動態變更WebService網址

SoapHttpClientProtocol.Discover 方法

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^