문제
웹 서비스를 만들었고 해당 메서드를 사용하고 싶을 때 프로시저에서 인스턴스화하고 메서드를 호출한 다음 마지막으로 처리합니다. 그러나 "private void"에서 웹 서비스를 인스턴스화하는 것도 괜찮을 수 있다고 생각합니다. Main_Load(개체 전송자, EventArgs e)" 이벤트입니다.
문제는 첫 번째 방법으로 수행하면 메서드 중 하나가 필요할 때마다 웹 서비스를 인스턴스화해야 하지만 다른 방법으로는 예를 들어 양식에서 사용할 때 항상 웹 서비스를 연결해야 한다는 것입니다.
이러한 관행 중 어느 것이 더 나은지 또는 훨씬 더 나은 방법이 있는지 알고 싶습니다.
전략 1
private void btnRead_Click(object sender, EventArgs e)
{
try
{
//Show clock
this.picResult.Image = new Bitmap(pathWait);
Application.DoEvents();
//Connect to webservice
svc = new ForPocketPC.ServiceForPocketPC();
svc.Credentials = new System.Net.NetworkCredential(Settings.UserName, Settings.Password);
svc.AllowAutoRedirect = false;
svc.UserAgent = Settings.UserAgent;
svc.PreAuthenticate = true;
svc.Url = Settings.Url;
svc.Timeout = System.Threading.Timeout.Infinite;
svc.CallMethod();
...
}
catch (Exception ex)
{
ShowError(ex);
}
finally
{
if (svc != null)
svc.Dispose();
}
}
전략 2
private myWebservice svc;
private void Main_Load(object sender, EventArgs e)
{
//Connect to webservice
svc = new ForPocketPC.ServiceForPocketPC();
svc.Credentials = new System.Net.NetworkCredential(Settings.UserName, Settings.Password);
svc.AllowAutoRedirect = false;
svc.UserAgent = Settings.UserAgent;
svc.PreAuthenticate = true;
svc.Url = Settings.Url;
svc.Timeout = System.Threading.Timeout.Infinite;
}
private void btnRead_Click(object sender, EventArgs e)
{
try
{
//Show clock
this.picResult.Image = new Bitmap(pathWait);
Application.DoEvents();
svc.CallMethod();
...
}
catch (Exception ex)
{
ShowError(ex);
}
}
private void Main_Closing(object sender, CancelEventArgs e)
{
svc.Dispose();
}
해결책
웹 서비스를 호출하는 빈도에 따라 다릅니다.거의 지속적으로 호출하려면 방법 #2를 사용하는 것이 더 나을 것입니다.그러나 너무 자주 호출되지 않을 경우 방법 #1을 사용하고 필요할 때만 인스턴스화하는 것이 좋습니다.
다른 팁
지금은 모바일 기기를 위한 솔루션을 만들었고 불규칙한 시간에 사용하게 되었는데, 10분, 1시간, 4시간 내에 사용할 수 있으며 매우 가변적이므로 더 나은 접근 방식이 첫 번째 전략인 것 같습니다.
작년에 우리는 웹 서비스를 사용하는 프로젝트를 진행했습니다. 사실 우리는 Sub New() 프로시저에서 웹 서비스를 인스턴스화했고 매우 잘 실행했습니다. 그러나 때때로 일부 사용자는 의자에서 일어나서 그들이 돌아와서 애플리케이션을 계속하려고 시도했을 때 시간 초과 오류 메시지를 받았고 다시 로그인해야 했습니다.
어쩌면 사용자들이 자리에서 아주 오랫동안 밖에 나갔을 수도 있기 때문에 우리는 그것이 괜찮을 것이라고 생각했지만, CEO들과의 애플리케이션 프레젠테이션에서 한 번은 똑같은 시나리오가 일어났고 개인적으로 나는 그 행동을 좋아하지 않았습니다. 그래서 질문입니다.
답변 해주셔서 감사합니다.