ASP.NET의 비동기 콜백 및 웹 폼 응용 프로그램을 사용하여 WCF로 작성된 서버 응용 프로그램이 있습니다. 모든 통신이 2 응용 프로그램 사이에 문제가되지 않습니다. 웹 응용 프로그램을 통해 서버에서 노출 된 함수를 호출 할 수 있으며 서버가 웹 응용 프로그램에 콜백을 보낼 수 있습니다. 그러나 콜백 작업 내의 함수 및 기타 시간, 그들은하지 않습니다.WCF ASP.NET 상호 운용성
예를 들어 웹 앱의 로그인 버튼을 사용하여 사용자 이름과 비밀번호를 서버에 보내고 서버가 데이터베이스와 비교하여 로그인 정보가 올바른 경우 콜백을 보내야합니다. 웹 응용 프로그램에서 새 페이지를 엽니 다. 그것은 코드 뿐이다,
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);
}
내가 중단 점에 놓고, 모든 것이 제대로 작동 볼 수 있습니다
public void Login(String username, String password)
{
//DoCheckAgainstDatabase(username, password);
ICallback callback = OperationContext.Current.GetCallbackChannel<ICallback>();
callback.LoginSuccess();
}
및 웹 응용 프로그램 코드 : 여기
은 관련 서버 코드 'ScriptManager.RegisterStartupScript ...'는 항상 제대로 실행되지 않습니다.스레딩과 관련이 있습니까? 누구든지이 문제를 해결할 수있는 방법을 제안 할 수 있습니까?
미리 감사드립니다. 데이비드
당신이 OnLoginSucceeded' 항상 호출되지 않습니다'을 의미합니까 : 새로운 페이지를 열어 진행 전으로 ManualResetEvent를 추가했습니다, 나는 콜백을받을 때까지 다음 버튼 클릭 방식에서, 나는 다음, 대기 , 그렇지 않으면'RegisterStartupScript'가 항상 원하는 효과를 갖는 것은 아니겠습니까? –
OnLoginSucceeded는 항상 매번 호출되며, 원하는 효과를 항상 지니지는 않는 RegisterStartupScript입니다. –
OnLoginSucceeded는 페이지가 렌더링 단계로 넘어 가서 출력을 렌더링 한 후에 발생하는 경우가 있습니다. 이 경우 시작 스크립트를 얻을 수 없습니다. PreRender 이벤트 핸들러에 중단 점 또는 Debug.WriteLine을 넣고 OnLoginSucceeded 전에 발생했는지 여부를 확인하여 테스트 할 수 있습니다. –