2009-11-20 4 views
11

구조체를 WCF 서비스의 반환 형식으로 사용하는 것에 대한 공식적인 권장 사항이 있습니까?구조체를 WCF 서비스와 함께 사용

저는 현재 서면으로 작성하지 않은 서비스와 상호 작용하고 있습니다. 내 성가심이 필요한지 확인하라고 영감을 받았습니다.

  • 나는 계약 스타일을 시작 : 그 샘플이 항상 보여 무엇 때문에 아마도 부분적으로하지만 지금은 그것에 대해 생각하는, 다른 "직관"이유 -

    나는 과거에 항상 사용되는 클래스를했습니다 서비스가 앞뒤로 전달할 유형을 나타내는 인터페이스가있는 별도의 프로젝트를 정의합니다.

  • 필자는 LINQ를 많이 사용하기 때문에 null 허용 여부에 대한 테스트는 참조 유형에 내재되어 있지만 구조체 및 기타 값 유형에서는 항상 null 허용을 표시해야합니다.

나는 내 마음에 글 머리 기호 목록보다 직관적이라고 인정하지만 즉시 나에게 오는 일부입니다. 내가 반환 값을 처리 할 때 쓰는 내가 구조체를 반환하는 서비스를 다루는 데 있기 때문에 질문을 생각 : 당신이 구조체를 만들 수 있다면

var foo = Bar.Value.MyField; 

대신

var foo = Bar.Value; 
+0

@David : 몇 가지 추가 생각으로 내 대답을 업데이트했습니다. –

답변

17

의과 [DataContract] 속성을 입력하십시오. 계속 사용하십시오! WCF에서는 차이가 없습니다. WCF는 DataContract 특성으로 표시된 클래스 또는 구조체와 serialize 된 메시지에 포함될 모든 필드를 [DataMember] 특성으로 표시하도록 요구합니다.

[AttributeUsageAttribute(AttributeTargets.Class| 
AttributeTargets.Struct|AttributeTargets.Enum, 
Inherited = false, AllowMultiple = false)] 
public sealed class DataContractAttribute : Attribute 

UPDATE를 : 클래스 대신 구조체를 사용하는 경우에 관해서는 (일반적으로 당신이 DataContractAttribute에 대한 MSDN의 문서를 선택하면

, 그것은 당신이뿐만 아니라 구조체에서 사용할 수 있음을 보여줍니다 WCF는 메시지 전달에 대해 정말이기 때문에 (즉, 클라이언트가 메소드 호출, 그 호출하고 매개 변수는 직렬화 된 메시지로 변환됩니다, 그러나

When should I use a struct instead of a class?

:,) .NET에서, 여기 SO 질문 참조 그 사람은 센이된다. 와이어를 가로 지른 다음 다른 쪽 끝에서 다시 어셈블하고 메소드 호출로 되돌려 놓음), 나는 struct을 사용할 어떤 강력한 이유도 보이지 않습니다.

일반 .NET의 모든 이점은 실제로 WCF의 SOA 세계에는 적용되지 않습니다. (클래스 또는 구조체 인스턴스를 지나가는 것은 아닙니다. 위 참조).

+0

제 질문은 그것이 할 수 있는지 여부와 적절할 때 상황을 더 찾고 있습니다. – t3rse

+0

처음에는 DTO의 구조를 사용하는 이유를 확인합니다. DTO의 수명이 매우 짧고 인스턴스가 ref 유형이되는 많은 이점을 수집 할 수없는 GC에 대한 부담이 적습니다. 그러나 WCF 내부 구조에 따라 다릅니다. –

관련 문제