2013/12/06

[筆記] 動態指定 XML Web Service 來源

這幾天幫公司專案重寫登入驗證的問題,由於客戶是使用 SSO 搭配多主機的方式,所以在總公司的 AP 上開 Web Service 讓各點的 AP 主機可以連回總公司做登入驗證


寫 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");
    //取參數的方法,請自行處理這段
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress addr = new EndpointAddress(serviceUri);
ServiceReference1.WebService1SoapClient soapClient2 =
    new ServiceReference1.WebService1SoapClient (binding, addr);
Response.Write(soapClient.Hello("aaaaa"));  
這樣就能把更動的服務縮小到加入呼叫參考的頁面,WebReferences目錄,跟一筆db資料啦

不然一次上版要打開幾 10 個 Web.Config 慢慢加真的是會讓人想抓狂

至於為什麼會分幾 10 個 AP 主機.....  那就不是小的可以管得到的事情了 0rz


沒有留言:

張貼留言