2012-03-05 2 views
0

으로 반환합니다. wcf 서버 에서 BL 객체를 반환하려고합니다.하지만 모든 개인적인 특질만을 얻습니다.wcf bl 객체의 public 멤버를

BL public 속성 만 반환하는 방법.

[Serializable()] 
public class Account 
{ 
    #region properties 

    private int _accountId; 
    public int AccountID 
    { 
     get 
     { 
      return _accountId; 
     } 
     set 
     { 
      _accountId = value; 
     } 
    } 


    private string _title; 
    public string Title 
    { 
     get 
     { 
      return _title; 
     } 
     set 
     { 
      _title= value; 
     } 
    } 


    private string _name; 
    public string Name 
    { 
     get 
     { 
      return _name; 
     } 
     set 
     { 
      _name= value; 
     } 
    }} 

이 인터페이스의 WCF 방법을 먹으 렴 내가 WCF 서버에 refernce를 일부 DLL의 BL 클래스 이잖아

[OperationContract] 
    [WebGet(UriTemplate = "{Key}/{Client}/Registrations?eventID={eventID}&regStatus={regStatus}")] 
    List<Registration> GetRegistrations(string key, string client, int eventID, int regStatus); 

반환 목록을 만드는 방법

public List<Registration> GetRegistrations(string key, string client, int eventID, int regStatus) 
    { 
     if (Validation.ValidateClient(key, client) == false) 
      return null; 

     List<Registration> regs = Registration.GetRegByColumnandValue(eventID, (Registration.RegStatusFlags)regStatus); 
     return regs; 
    } 

답변

0

WCF는 [Serializable] 특성을 사용하지 않습니다.

이처럼 BL 개체 (또는 DTO를) 쓰기 :

[DataContract] 
public class Account 
{ 
    private int _accountId;  
    [DataMember] 
    public int AccountID 
    { 
     // get/set 
    } 

    private string _title; 
    [DataMember]  
    public string Title 
    { 
     // get/set 
    } 
} 

에서 [직렬화] 유형이 직렬화 방법을 부수고있다, 그것은 WCF에 적합하지 않습니다.

다른 레이어에 포함되어 있고 제거 할 수없는 경우 DTO (데이터 전송 개체) 클래스를 만듭니다. 최소한 서버 측에서 관련 속성을 복사하는 코드가 필요합니다.

+0

[Serializable] 특성이 내 bL 개체에 있습니다. 내가 wcf 서버에서 그것을 호출하고 싶지만 그 개인 변수 만 반환합니다 –

+0

예, 질문에서 말한 것처럼. DataContract가 필요합니다. –

+1

실제로 WCF는'[Serializable]'로만 표시된 클래스를 사용할 수 있습니다.이 경우 [NonSerialized]로 표시되지 않은 비공개 필드를 직렬화합니다. 그러나, 바람직한 방법은 응답자가 말한 것을하고'[DataContract]'를 사용하는 것입니다. – luksan

관련 문제