2011-11-11 69 views
0

我正在使用ASP.NET應用程序和Web服務,出於某種原因Web服務方法之一被跳過。我相信這是一個相當簡單的問題,但是讓我陷入了一天的困境。我將方法調用放在錯誤的方法中,我會假設OnPreRender會在頁面加載之前處理所有內容。我相當確信問題出現在這個區域,如果在實例化表單時將表單對象的ImageLoc設置爲URL,那麼它會很好地加載到ASP.NET頁面中。跳過了Web服務方法?

我不認爲我遺漏了任何相關代碼,但如果您需要查看其他內容,請告訴我。表單對象只是get/set的幾個屬性,所以我把它放在了外面。另外請注意,字符串參數將更改爲其他內容,我只是試圖建立基礎工作。

.aspx.cs:

 localhost.MobileFormServices wsMobile = new localhost.MobileFormServices(); 

    protected override void OnPreRender(EventArgs e) 
    { 
     base.OnPreRender(e); 
     //Call the web service to pass image URL 
     wsMobile.NewForm("parameters"); 
     FormImage.ImageUrl = wsMobile.FormProperties().ImageLoc; 
    } 

Web服務方法:

//new form object instance 
    private FormLibrary.Form form = new FormLibrary.Form(); 

    //adds the image location to the form object 
    [WebMethod] 
    public void NewForm(String parameters) 
    { 
     form.ImageLoc = "http://www.prelovac.com/vladimir/wp-content/uploads/2008/03/example.jpg"; //breakpoint here, never hit 
    } 

    [WebMethod] 
    public FormLibrary.Form FormProperties() 
    { 
     return this.form; 
    } 

回答

1

您確定沒有調用Web服務嗎?您網頁上的電話

FormImage.ImageUrl = wsMobile.FormProperties().ImageLoc; 

雖然使用同一個對象實例調用時比方法

wsMobile.NewForm("parameters"); 

被稱爲Web服務方面完全不同的實例。因爲

private FormLibrary.Form form = new FormLibrary.Form(); 

被稱爲在每個Web服務調用。

在每個Web服務調用中都會創建處理呼叫的Web服務的新實例。 所以在你的例子中。

  1. wsMobile.NewForm(「parameters」) - 當創建處理此調用的實例時創建新的FormLibrary.Form。

  2. 在此調用

    設置form.ImageLoc - 但這種形式是局部的,例如

  3. FormImage.ImageUrl = wsMobile.FormProperties()ImageLoc。 - 再次創建新的FormLibrary.Form,用於處理此調用的實例

  4. 您返回新創建的FormLibrary.Form的ImageLoc。不是你以前設置的。

+0

這對我有意義,但你會如何建議解決這個問題? – turbo

+0

我給了它一些想法,將一個表單對象傳遞給asp.net應用程序,使用/修改它,然後通過Web服務傳遞回來解決它?我現在要嘗試一下。 – turbo

+1

您可以將FormLibrary.Form作爲靜態存儲,但這會在共享相同表單的所有頁面中結束,這可能很糟糕,但取決於每個項目。其他方法是將其存儲在Session或某些外部存儲庫(如數據庫)中。或者如果你真的在你的應用中使用兩個電話,也許你應該做到這一點?在這個例子中,第二次調用沒有意義。第一次電話應該返回你所需要的。如果你覺得這個答案有用,請upvote :) –

0

你可以嘗試使用OnPreRenderComplete事件,而不是的OnPreRender。

+0

試過了,有同樣的問題。 – turbo

0

有時調試器會感到困惑。試試這個(做一個重建所有):

[WebMethod] 
public void NewForm(String parameters) 
{ 
    System.Diagnostics.Debugger.Break(); 
    form.ImageLoc = "http://www.prelovac.com/vladimir/wp-content/uploads/2008/03/example.jpg"; //breakpoint here, never hit 
} 
+0

仍然沒有到這裏,所以這意味着它永遠不會被稱爲? – turbo

+0

您是否收到錯誤訊息?您是否確定IIS在測試之間關閉並重新啓動(或者服務器是什麼)?嘗試刪除並重新添加代理。 –

+0

沒有錯誤信息,基本上我將使用Web服務訪問由另一個程序生成的某些圖像(尚未製作,這就是爲什麼我使用的是隨機圖像)。我試圖將該圖像傳遞給我的asp.net應用程序來顯示它。我試過重新啓動我正在使用的服務器。你的意思是代理類嗎?我也嘗試過。我做了一些閱讀,我認爲這可能是一個xml解析問題,當您從webservices傳遞對象時發生,但解決方案並未改變我的任何操作(刪除代理中的表單類並使用FormLibrary添加) – turbo

0

試試你的OnPreRender()代碼移動到OnInit的()。

+0

否改變,仍然跳過斷點並且不按預期執行。 – turbo

+0

爲什麼這會改變什麼? –