2011-12-23 2 views
1

이 줄에 StackOverflowException이 표시됩니다. 저는 WCF를 처음 접했지만 무한 루프에서 호출되지는 않습니다. 나는 여기 누군가가이 문제에 대해 밝힐 수 있기를 바랬다.WCF, StackOverflowException

get { return LevStad; } 

코드입니다.

// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together. 
    [ServiceContract] 
    public interface IService 
    { 
     [OperationContract] 
     string GetData(int value); 
    [OperationContract] 
    Kund GetDataUsingDataContract(Kund kund); 

    // TODO: Add your service operations here 
} 
[DataContract] 
public class Kund 
{ 
    int iD; 
    string fornamn = ""; 
    string efterNamn = ""; 
    string telefon = ""; 
    string boAdress = ""; 
    string boPostnummer = ""; 
    string boStad = ""; 
    string boLand = ""; 
    string levAdress = ""; 
    string levPostnummer = ""; 
    string levStad = ""; 
    string levLand = ""; 

    [DataMember] 
    public int ID 
    { 
     get { return iD; } 
     set { iD = value; } 
    } 

    [DataMember] 
    public string Fornamn 
    { 
     get { return fornamn; } 
     set { fornamn = value; } 
    } 
    [DataMember] 
    public string EfterNamn 
    { 
     get { return efterNamn; } 
     set { efterNamn = value; } 
    } 
    [DataMember] 
    public string Telefon 
    { 
     get { return telefon; } 
     set { telefon = value; } 
    } 
    [DataMember] 
    public string BoAdress 
    { 
     get { return boAdress; } 
     set { boAdress = value; } 
    } 
    [DataMember] 
    public string BoPostnummer 
    { 
     get { return boPostnummer; } 
     set { boPostnummer = value; } 
    } 
    [DataMember] 
    public string BoStad 
    { 
     get { return boStad; } 
     set { boStad = value; } 
    } 
    [DataMember] 
    public string BoLand 
    { 
     get { return boLand; } 
     set { BoLand = value; } 
    } 
    [DataMember] 
    public string LevAdress 
    { 
     get { return levAdress; } 
     set { levAdress = value; } 
    } 
    [DataMember] 
    public string LevPostnummer 
    { 
     get { return levPostnummer; } 
     set { levPostnummer = value; } 
    } 
    [DataMember] 
    public string LevStad 
    { 
     get { return LevStad; } 
     set { levStad = value; } 
    } 
    [DataMember] 
    public string LevLand 
    { 
     get { return levLand; } 
     set { levLand = value; } 
    } 
} 

    public class Service : SQLBase, IService 
    { 
     public Service() : base() 
     { 

     } 
     public string GetData(int value) 
     { 
      return string.Format("You entered: {0}", value); 
     } 
     public Kund GetDataUsingDataContract(Kund kund) 
     { 
      kund = new Kund(); 
      SqlCommand SQLCom = new SqlCommand(@"SELECT Kund.ID, Förnamn, Efternamn, Telefon, Adress, Postnummer, Stad, Land 
FROM Webbshop.dbo.Kund INNER JOIN Webbshop.dbo.Adress ON Kund.BoAdress = Adress.ID"); 
      SQLCom.Connection = DatabaseConnection; 
      SQLCom.Connection.Open(); 
      SqlDataReader rdr = SQLCom.ExecuteReader(); 
      while (rdr.Read()) 
      { 
       kund.ID = (int) rdr[0]; 
       kund.Fornamn = rdr[1].ToString().Trim(); 
       kund.EfterNamn = rdr[2].ToString().Trim(); 
       kund.Telefon = rdr[3].ToString().Trim(); 
       kund.BoAdress = rdr[4].ToString().Trim(); 
       kund.BoPostnummer = rdr[5].ToString().Trim(); 
       kund.BoStad = rdr[6].ToString().Trim(); 
       //kund.BoLand = rdr[7].ToString().Trim(); 
       //kund.LevAdress = rdr[8].ToString(); 
       //kund.LevPostnummer = rdr[9].ToString(); 
       //kund.LevStad = rdr[10].ToString(); 
       //kund.LevLand = rdr[11].ToString(); 
      } 
      SQLCom.Connection.Close(); 
      return kund; 
     } 
    } 

public class SQLBase 
{ 
    protected static SqlConnection DatabaseConnection = new SqlConnection(); 
    public SQLBase() 
    { 
     DatabaseConnection.ConnectionString = 
      "Data Source=(local);Initial Catalog=Webbshop;Integrated Security=True"; 
    } 
} 

Kund kund = null;// = new Kund(); 
using (ServiceReference.ServiceClient wcfClient = new ServiceReference.ServiceClient()) 
{ 
    kund = wcfClient.GetDataUsingDataContract(kund); 
} 
+2

사람들이 코드를 읽고 도움을 원하면 관련없는 99 %를 제거하십시오. –

답변

6

대문자입니다.

get { return levStad; }

지금, 그 자체를 반환하는 것, get를 호출 자체를 반환 ... 스택 오버 플로우 : 그것은 변수를 반환해야합니다.


또한 BoLand에 문제가있을 것이다; 문제가

public string BoLand 
{ 
    get { return boLand; } 
    set { boLand = value; } 
}
2
public string LevStad 
{ 
    get { return LevStad; } 
    set { levStad = value; } 
} 

있습니다 : set는 대문자, 다시 set을 ... 호출하는 자신을 설정합니다. LevStad에서 되풀이됩니다.

즉. LevStad를 얻으면 LevStad 속성을 얻으려는 LevStad 속성을 얻으려고합니다. 그리고 콜 스택이 오버플로 할 때까지 계속됩니다.

그냥 대신 필드를 설정하십시오 (C#은 대소 문자를 구분합니다).

public string LevStad 
{ 
    get { return levStad; } 
    set { levStad = value; } 
} 

당신은 볼랜드의 설정에 비슷한 문제가있을 것이다.

public string BoLand 
{ 
    get { return boLand; } 
    set { BoLand = value; } 
} 
+0

사실 그것은 또 다른 비슷한 오류입니다. 하나의 OP 질문 : LevStad –

+0

@RuneFS : 예, 자신을 바로 잡았습니다. – pdr

관련 문제