[ASP.NET] 使用 Web Service Redirection

摘要:[ASP.NET] 使用 Web Service Redirection

前言


  一般的Redirect導向都會在Client處理,但是如果當真的有需求要在Web Service做重定向時該如何處理呢? 其實在Web Service做重訂向的動作是不好的,基於職責分工Web Service該做的工作應該是接收Client端的呼叫後處理資料內容後在將處理好的資料回傳給Client,而碰到重定向這種需求也應該是由Web Service回傳一個URL給Client再由Client端去處理重定向的動作才正確,但如果真的無法避免需要使用Web Service做重定向,可以參考以下範例的方法處理。

 

範例


在 Web Service 透過修改 StatusCode 與 HTTP Header 處理 Redirection,語法如下:

ASPX:

<div>
    <asp:Button ID="Button1" 
        runat="server" 
        Text="Call Web Service" 
        PostBackUrl="http://localhost:21978/Web/WebService.asmx/RedirectPage" />
</div>

Web Service:

[WebMethod]
public string RedirectPage() {
    Context.Response.StatusCode = 302;
    Context.Response.AddHeader("Location", "http://localhost:21978/Web/Default2.aspx");
    return null;
}

 

  這邊要注意的是不建議使用 Context.Response.Redirect("Default2.aspx"),因為HTTP的回應中基本信息規範不盡相同,可能發生非預期錯誤,如果使用了以上這種方式重定向,網頁的連結按鈕必須要使用直接POST方式發送請求,如使用以下方法呼叫則將產生 System.Net.WebException 例外。

MyWS.WebService ws = new MyWS.WebService();
ws.RedirectPage();

  因為 Web Service 使用了SOAP協定,而做了重定向的方法並不符合SOAP協定的操作方式,所以無法以程式面去呼叫此Web服務方法。

 

參考資料


How to Apply the Basic Profile

 

範例程式


TWSRedirect.rar

 

 


以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)