2010-06-28 60 views
0

我有這個WebMethod重定向到該服務器上的另一個頁面。重定向從服務器的新頁面

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 
public static Boolean realizaConsulta(Dictionary<string, string> datos) 
{ 
    System.Web.HttpContext.Current.Response.Redirect("PRepConsulta.aspx", false); 
} 

,但我得到這個錯誤:

Microsoft JScript runtime error: Sys.Net.WebServiceFailedException: The server method 'realizaConsulta' failed with the following error: System.InvalidOperationException-- Authentication failed.

是什麼原因導致這個錯誤?


看我已經嘗試了其他選項:

 [WebMethod] 
     [ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 
     public static Boolean realizaConsulta(Dictionary<string, string> datos) 
     { 
      System.Web.HttpContext.Current.Server.Execute("PRepConsulta.aspx", false); 
     } 

它的作品,因爲它關係到PRepConsulta.aspx並執行UNDERCODE,但頁面一直沒有出現。

我也曾嘗試:

 [WebMethod] 
     [ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 
     public static Boolean realizaConsulta(Dictionary<string, string> datos) 
     { 
       HttpContext.Current.Server.Transfer("PRepConsulta.aspx", false); 
     } 

,但我得到這個錯誤:

微軟JScript運行時錯誤:Sys.Net.WebServiceFailedException:服務器方法 'realizaConsulta' 失敗,出現以下錯誤:系統.Threading.ThreadAbortException - 子進程anulado。

我不知道還有什麼嘗試

感謝所有幫助

+0

什麼是你調用的WebMethod目標是什麼?您是否想顯示其他內容或根據您傳遞的數據將用戶發送到適當的頁面? 你可能更好的是將查詢字符串中的數據傳遞到新頁面並從那裏重定向。 – 2010-06-28 16:51:58

回答

1

我不知道的「身份驗證失敗」的一部分,而是一個WebMethod內部的Response.Redirect的可能是要打破調用方法的SOAP客戶端。它期望一個布爾值,而不是重定向。

+0

缺少一個更好的地方來放這個回覆......聽起來你並沒有實際告訴瀏覽器重定向。然而,你已經連接了JavaScript來調用Web服務,它調用它並接收除boolean之外的東西(這正是它期望的)。對Web服務的SOAP調用的上下文與您正在查看的網頁的上下文不同。瀏覽器從來沒有被告知重定向到另一個頁面,而只是調用SOAP方法並收到意外的響應。重定向邏輯基本上位於錯誤的地方。 – David 2010-06-28 16:20:26

+0

鏈接不再工作。 – 2014-01-21 08:06:39

0

OK,我也會組織應用程序的流程:

從我的客戶,在JavaScript中,即時調用Web服務

PageMethods.realizaConsulta(DATOS);

在我隱藏我必須執行PageMethod的,並呼籲另一頁

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 
public static Boolean realizaConsulta(Dictionary<string, string> datos) 
{ 

    clsGeneral consulta; 
    DataTable dtTemp = new DataTable(); 

    using (consulta = new clsGeneral("SQLConn")) 
    { 
     consulta.consultaPrograma(ref dtTemp, datos["Codigo"], Int16.Parse(datos["Cod_Actividad"]), Int16.Parse(datos["Cod_SubActividad"]), datos["FechaIni"], datos["FechaFin"]); 
     HttpContext.Current.Session["Consulta"] = dtTemp; 

    //THIS ARE THE 3 DIFFERENT WAYS I HAVE TRIED TO CALL THE PRepConsulta.aspx, 
    //I DONT KNOW IF THERE IS A BETTHER WAY TO DO IT 

    //System.Web.HttpContext.Current.Response.Redirect("PRepConsulta.aspx", false); 
    //HttpContext.Current.Server.Transfer("PRepConsulta.aspx", false); 
    //System.Web.HttpContext.Current.Server.Execute("PRepConsulta.aspx",writer, false); 
    } 
    return true; 
} 

THANKS

+0

重定向在這個設計中確實只是錯誤的地方。如果用戶將_always_重定向到另一個頁面,那麼您可能需要:1)將用戶從JavaScript重定向到新頁面,並在該頁面的負載上調用此邏輯; 2)在對此WebMethod的調用返回後,將重定向放置在JavaScript中。將重定向放在WebMethod中並不能告訴瀏覽器重定向,它只是打破了返回值。 – David 2010-06-28 17:10:19

+0

那麼,那是我在開始時如何做的,我打電話給webMethod,之後,我通過window.open函數調用了新頁面,但是當我將項目上傳到服務器時,我意識到窗口在webMethod結束之前打開。 webMethod運行一個查詢,並將結果保存到一個會話變量中,然後在我打開的下一個窗口中使用它。 這就是爲什麼我試圖從服務器打開窗口,因爲我需要確定,查詢已經運行,結果是在我的會話變量。 – ingrid 2010-06-28 19:00:03

+0

聽起來像您在異步調用WebMethod。當然,有一種方法可以等待退貨,檢查價值並作出相應的響應(無論是重定向還是錯誤消息)。另外,是否有一個特定的原因,這個WebMethod首先被JavaScript調用?似乎有一些更大的影響這個設計的圖片,這裏不清楚。 – David 2010-06-29 12:24:55