我有一個使用異步回調和ASP.NET中的webforms應用程序在WCF中編寫的服務器應用程序。 這兩個應用程序之間的所有通信都是正常的,我可以通過Web應用程序調用服務器中的公開函數,並且服務器可以向Web應用程序發送回調函數,但是有時候回調函數內部的函數以及其他時間,他們沒有。WCF ASP.NET互操作性
例如,我希望Web應用上的登錄按鈕向服務器發送用戶名和密碼,服務器根據數據庫檢查此信息,如果登錄信息正確,則應發送回調,在Web應用程序中打開一個新頁面。
下面是相關服務器代碼:
public void Login(String username, String password)
{
//DoCheckAgainstDatabase(username, password);
ICallback callback = OperationContext.Current.GetCallbackChannel<ICallback>();
callback.LoginSuccess();
}
和Web應用程序代碼:
private InstanceContext _instanceContext;
private ServiceClient _service;
public CallbackHandler MyCallbackHandler = new CallbackHandler();
protected void Page_Load(object sender, EventArgs e)
{
_instanceContext = new InstanceContext(MyCallbackHandler);
_backEnd = new ServiceClient(_instanceContext, "NetTcpBinding_IAU", "net.tcp://localhost/MyService/Service");
_backEnd.Open();
MyCallbackHandler.LoginSucceeded += OnLoginSucceeded;
}
protected void LoginButton_Click(object sender, EventArgs e)
{
_backEnd.Login(UsernameTextBox.Text, PasswordTextBox.Text);
}
private void OnLoginSucceeded(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "OpenClientWindow", "window.open('Client.aspx','_self');", true);
}
我可以把斷點,看到一切正常,它只是代碼'ScriptManager.RegisterStartupScript ...'不能始終正確執行。
這可能是與線程有關嗎?任何人都可以提出一種解決方法嗎?
在此先感謝! 大衛
你的意思是'OnLoginSucceeded'並不總是被調用,或者它確實如此,但'RegisterStartupScript'並不總是具有所需的效果? –
OnLoginSucceeded每次都被稱爲罰款,這是RegisterStartupScript並不總是具有所需的效果。 –
OnLoginSucceeded有時可能會在頁面進入Render階段並呈現其輸出後觸發。在這種情況下,你不會得到你的啓動腳本。您可以通過在PreRender事件處理程序中放置一個斷點或一個Debug.WriteLine來測試它,並查看它是否發生在OnLoginSucceeded之前。 –