寫 Web Service 比想像中要簡單許多,大概就是寫一支 ASPX 那種感覺 (到底是什麼感覺...)
測試起來也比泛型處理常式方便,因為在專案下直接對 asmx 檔右鍵用瀏覽器去瀏覽,就會告訴你這個 Service 的公開方法,點進方法之後還可以讓你填入要的值來做叫用的測試
但這個測試的功能僅限 localhost 使用,放到正式機時無聊想試試看才被提示:
The test form is only available for requests from the local machine.哭哭,不能亂玩了 (誤
存取 Web Service 的方法就... 專案上右鍵 -> 加入服務參考 -> 填上 Web Service 的路徑後點"移至"
如果是把 AP 專案跟服務的專案放在同一個方案下面開發的,也可以直接用探索的方式讓 Visual Studio 幫你撈出來
命名空間打個討喜的名字後按下確定即可完成
完成後會發現專案下多了一個 App_WebReferences 目錄(網站專案似乎是 Service References 目錄?),目錄下就是剛剛加入的服務參考
可以開始使用這個服務了,跟用物件一樣把它 New 出來就可以用啦~~
ServiceReference1.WebService1SoapClient soapClient =
new ServiceReference1.WebService1SoapClient ();
Response.Write(soapClient.Hello("World"));
如果就這樣放上正式環境,那應該會大爆炸 XD
因為在剛剛設定好參考按下確定時,除了產生參考的目錄之外,Web.Config 也被加了類似下面的一堆東西
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="WebService1Soap" .......>
...... 中略 ......
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:53776/WebService1.asmx" binding="basicHttpBinding"
bindingConfiguration="WebService1Soap" contract="ServiceReference1.WebService1Soap"
name="WebService1Soap" />
</client>
</system.serviceModel>
所以這邊要改好才能上上去...
但要上到各個 AP 去時一個一個開 Web.Config 來改實在是有點太遜啦
所以來試試看把這個服務位置當參數記到 db 的參數表裡面,上版時只要針對參數做微調就好啦
(公司的產品所有的參數都是放在 db 內的一個 table,所以統一將這個參數掛進去)
先在要調用服務的頁面加入命名空間 System.ServiceModel (參考記得要先加好)
然後修改剛剛的叫用方法,增加傳入兩個引數 BasicHttpBinding、EndpointAddress :
string serviceUri = _dbCmd.GetDBParam("Service1");這樣就能把更動的服務縮小到加入呼叫參考的頁面,WebReferences目錄,跟一筆db資料啦
//取參數的方法,請自行處理這段
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress addr = new EndpointAddress(serviceUri);
ServiceReference1.WebService1SoapClient soapClient2 =
new ServiceReference1.WebService1SoapClient (binding, addr);
Response.Write(soapClient.Hello("aaaaa"));
不然一次上版要打開幾 10 個 Web.Config 慢慢加真的是會讓人想抓狂
至於為什麼會分幾 10 個 AP 主機..... 那就不是小的可以管得到的事情了 0rz
沒有留言:
張貼留言