2012-11-30 2 views
0

그래서 WCF를 통해 개체를 보내고 있습니다. 제가하고 싶은 것은 그들이 가기 전에 원하는 방식으로 엔티티를 변경할 수있는 기회를 갖는 것입니다. WCF에서이 작업을 수행 할 필요는 없지만 작업을 수행 할 단일 장소가 필요하므로 다른 작업 영역이 표시되지 않습니다. 제안을 열기먼저 처리하기 전에 WCF를 통과하는 개체를 추출 할 수 있습니까?

하지만 누군가는 그것을 할 수있는 또 다른 방법 :

내가 DAL, 도메인 및 서비스의 일반적인 층을 가지고있는 경우. 그들은 모두 공통점을 공유합니다.

답변

2

나는 메시지 관리자가 또는 구성을 통해 프로그래밍 서비스 모델의 클라이언트 런타임 및 파견 런타임에서 사용할 수 있으며, 그 검사하고 메시지를 변경할 수있는 확장 성 개체가

Message Inspectors에 대해 이야기 생각 이후에 수신되었거나 송신되기 전에

이 샘플은 기본 클라이언트 및 서비스 메시지 유효성 검사 메커니즘을 구현하여 구성 가능한 XML 스키마 문서 세트에 대한 수신 메시지의 유효성을 검사합니다. 이 샘플에서는 각 작업에 대해 메시지의 유효성을 검사하지 않습니다. 이것은 의도적 인 단순화입니다. 또한

여기 당신은 내가 당신이 요구하고 정확하게 무엇을 이해하면

+0

감사합니다. 나는 링크를 읽을 것입니다! – Shumii

+0

네,이게 좋게 보입니다 ...하지만 제가 넘겨주고있는 물건을 얻는 방법에 대해서는 단서가 없습니다. 메시지 내용을보고 비 직렬화해야합니까? 나는 행동을 보았지만 같은 질문으로 난처하게되었다. – Shumii

+1

예, 내부에서 메시지를 비 직렬화해야합니다.이 객체로 수행하려는 작업은 무엇입니까? –

2

나는 확실하지 않다 클라이언트와 서버 측에서 모든 입력/출력 매개 변수를 처리 할 수 ​​IParameterInspector으로 살펴보고,하지만 난 그것을주지 시도.

Data Transfer Objects (DTO)를 찾고있을 수도 있습니다. 엔티티에 필요한 모든 데이터를 서비스에 보내기 전에 DTO에 넣을 수 있습니다. 그런 다음 서비스는 포함 된 데이터의 처리를 수행하고 다른 DTO를 클라이언트로 다시 보냅니다.

이렇게하면 DTO가 구조화되는 방식과 서비스 및 클라이언트에 실제로 필요한 데이터 유형을 완전히 제어 할 수 있습니다. 당신이 당신의 데이터베이스와 이전의 결과를 검색 한 후 당신의 사용자 정의 로직을 수행 할 수있는 메시지를 검사하고 드 직렬화
이미 직렬화 된 결과의 오버 헤드를 처리하는 대신

: 젠 H의 대답에 확장

+0

당신은 정확합니다. 그러나 나는 그것이 어떤 실재물을 위해 자동적으로 일어나길 원한다. – Shumii

+0

@ shumii 그런 다음 DTO가 인터페이스를 구현하고 결과를 반복하고 반환하기 전에 인터페이스를 호출하십시오. – cordialgerm

+0

@pickles를 사용하면 더 구체적으로 할 수 있습니까? 어디에서 루프를 수행하고 인터페이스를 "호출"하는 것이 정확히 무엇을 의미합니까? 의견을 보내 주셔서 감사합니다 - 나는 당신이 내가 성취하려는 것을 이해하고 있는지 확신하지 못합니다. – Shumii

1

당신은 그들을 고객에게 돌려 보낸다. 그 일을하는 한 가지 방법은 아래와 같습니다.

public interface IDataTransferObject 
{ 
     void CustomizeMeSomehow(); 
} 

[DataContract] 
public class MyDataTransferObject : IDataTransferObject 
{ 
    public void CustomizeMeSomehow() 
    { 
      //Your custom logic here.. 
    } 
} 

public class MyService 
{ 
     public List<MyDataTransferObject> GetObjects() 
     { 
      List<MyDataTransferObjects> items = Repository.RetrieveResults(); 

      foreach (var item in items) 
       item.CustomizeMeSomehow(); 

      return items; 
     } 
} 
+0

특정 객체를 반환하는 특정 서비스에 대해 이것이 작동하는 것을 볼 수 있습니다. 그러나 객체를 반환하는 모든 서비스는 어떻게됩니까? – Shumii

+0

@Shumii - 당신이하려는 일에 대해 더 많은 정보를 제공해야하지만,이 유형의 코드를 유틸리티 클래스에 넣을 수 있어야합니다. – cordialgerm

+0

필자는 개발자가 필 요없이 추가 기능을 사용하기를 원합니다. 추가 코드. 애드온을 받기 위해 의식적으로 아무 것도하지 않기를 바란다. 그들은 정상적으로 코드를 작성하고 서비스 호출에서 필요한 것을 얻고 자동으로 추가 필드를 얻습니다. ArsenMkrt에 대한 논의에서 위의 의견을 읽으십시오. 나는 아직도 그 해결책을 찾고 있지만 deserialization, serialization 및 reflection 오버 헤드가 걱정된다. – Shumii

관련 문제