2012-10-27 4 views
1

웹 서비스의 클래스 인 경우 매우 간단한 로그인 시스템을 만들려고합니다. 나는 ham에 createAccounts()가 checkCredentials가 호출 될 때마다 무한한 시간을 계속 가져 오는 문제가있다. 왜 그런가? 자주 요청 times.when웹 서비스에서 무한 시간 호출되는 메서드

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.ServiceModel.Web; 
using System.Text; 
using System.IO; 

public class Service : IService 
{ 
    static String path = @"PATH REMOVED"; 
    List<Account> accounts = new List<Account>(); 
    StreamWriter sw = null; 

    private void createAccounts() 
    { 
     String data = File.ReadAllText(path); 
     string[] data2 = data.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); 
     string[] temp; 
     for (int i = 0; i < data2.Length; i++) 
     { 
      temp = data2[i].Split(','); 
      if(!usernameExists(temp[0]) && temp[0] != "") 
      { 
       accounts.Add(new Account(temp[0],temp[1])); 
      } 
     } 
    } 

    public bool CreateAccount(String username, String password) 
    { 
     createAccounts(); 
     sw = File.AppendText(path); 
     if (!usernameExists(username)) 
     { 
      sw.WriteLine(username + "," + password + "\n"); 
      sw.Close(); 
      sw = null; 
      return true; 
     } 
     else 
     { 
      sw.Close(); 
      sw = null; 
      return false; 
     } 
    } 

    public bool usernameExists(String username) 
    { 
     createAccounts(); 
     if(accounts.Exists(a => a.username == username)) 
      return true; 
     else 
      return false; 
    } 

    public bool CheckCredentials(String username, String password) 
    { 
     createAccounts(); 
     if (usernameExists(username)) 
     { 
      if(accounts.Find(a => a.username == username).username == username && accounts.Find(a => a.username == username).password == password) 
       return true; 
      else 
       return false; 
     } 
     else 
      return false; 

    } 

} 

class Account 
{ 
    public String username; 
    public String password; 

    public Account(String u, String p) 
    { 
     username = u; 
     password = p; 
    } 

} 
+0

'CheckCredentials'를 호출하는 코드를 실제로 보여 주면 도움이 될 것입니다. –

+0

난 그냥이 작업을 테스트하고 아무것도 다른 콘솔 프로그램을 사용하고있다. – dspiegs

+0

함수가 정확하게 '1 x infinity'라고 정확히 어떻게 계산 되었는가? pantaloonillion과 같이 단순히 많은 횟수가 아닌가? –

답변

1

당신은 createAccounts와 usernameExists 사이에 루프를 가지고 : 난 당신이 문제를 찾기 위해 파일을 작성 ... 잡을 ...하려고 사용하는 것이 좋습니다. data2.Length가 0이 아닌 한 끝없이 반복됩니다.

+0

당신이 찾은 것 같아요! 고맙습니다! – dspiegs

+0

@ bam2403 - 도움이되어 기쁩니다! 이 문제가 해결되었다고 생각되면 답변으로 표시하십시오. – Carth

1

당신이 파일에 데이터를 저장, 당신은 그것이 muliththreading에서 파일을 작성합니다, 무한 쓰지한다, 스레드는 파일을 잠글 것입니다.

public bool CreateAccount(String username, String password) 
    { 
     createAccounts(); 

     try 
     { 
      sw = File.AppendText(path); 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
     if (!usernameExists(username)) 
     { 
      sw.WriteLine(username + "," + password + "\n"); 
      sw.Close(); 
      sw = null; 
      return true; 
     } 
     else 
     { 
      sw.Close(); 
      sw = null; 
      return false; 
     } 
    } 
관련 문제