2010-04-28 2 views
13

System.Tuple 클래스는 WCF의 데이터 계약 직렬화 기에서 지원됩니다 (즉, Tuple 개체를 WCF 호출에 전달하거나 결과의 일부 또는 전부로 수신 할 수 있습니까?).WCF에서 Tuple 개체를 보내는 중?

나는 this page을 찾았지만 분명히 "당신은 WCF와 함께 터플을 보내고받을 수 있습니다"라고 대답했습니다. 사람이 좀 더 확실한 대답으로 날을 제공 할 수 있습니다 -

나는 한 종류Tuple 자체 내에서 의 모든 데이터 계약 시리얼에서 지원하는, 당신이 할 수있는 같은데요? 감사.

+0

터플은 튜플 내부의 유형이 기본 유형이 아닌 사용자 정의 유형 인 경우 WCF에서 올바르게 작동해야합니다. 그렇다면 클라이언트가 튜플 이 아니기 때문에 클라이언트에 대한 순환 종속성이 발생합니다. 클라이언트는 TupleT가됩니다.지금이 문제가 있습니다. 웹 서비스의 일반적인 생각은 좋지 않은 것 같습니다. – irperez

답변

14

형식은 SerializableAttribute으로 표시되어 있으므로 내부에 저장하는 형식이 WCF에서도 serialize 할 수 있어야합니다.

체크 아웃 : Tuple'1의 링크, Tuple'2 등은 말한다 :

에서 [직렬화] /를 ISerializable 프로그래밍 모델 : 당신이 링크 된 문서가 다음 줄을 포함

[SerializableAttribute] 
public class Tuple<T1> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple 

주 부분 신뢰 환경에서는 지원되지 않습니다.

이렇게 보이는 것처럼 쉽지 않을 수 있습니다.

9

난 그냥이에 자신을 파고 있었다. (BTW의 Tuple static class 또한 체크 아웃 가치가있다), 그리고 당신이 실버 라이트를 통해 WCF 서비스를 소비하는 경우 하나의 문제가있을 것 같습니다 : 대한 Davy Brion's blog 참조 더.

Tuple의 Silverlight 버전에는 현재 문제가되는 Serializable 특성이 없습니다.

5

.NET 4.0 및 WCF에서 잘 작동하는 튜플이 있습니다 (튜플 지원에는 .NET 4.0이 필요합니다). 구현 여기

[OperationContract] 
Tuple<double, double> testTuple(); 

된다 :

public Tuple<double, double> testTuple() 
{ 
    return new Tuple<double, double>(42, 43); 
} 
여기
/// <summary> 
/// Test Tuples 
/// </summary> 
[TestMethod()] 
public void WcfTestTupleUnit() 
{ 
    Tuple<double, double> x; 
    x=CallViaWCF.testTuple(); 
    Assert.AreEqual(x.Item1, 42); 
    Assert.AreEqual(x.Item2, 43); 
} 
#endregion 

인터페이스이다 : 여기

합니다 (WCF 층을 통해 상기 메소드를 호출) 단위 테스트 방법

"WCF Service Application"(New..Project 참조)을 사용하여 디버깅하여 테스트했습니다. 전자 WCF 서비스. 디버거를 사용하여 WCF 클라이언트에서 WCF 서비스로 원활하게 이동하고 다시 돌아올 수 있으므로이 메서드를 사용하여 매우 유용합니다.

나는 또한 콘솔 앱과 서비스 앱에이 메소드를 배치하여 테스트 했으므로 확실히 작동한다.

+0

WCF 및 다른 클래스 라이브러리에 대해 .Net 4.61을 사용하고 호출 응용 프로그램에 .Net 4.71을 사용하여 작동하는 WCF 서비스에서 시도했습니다. 이 오류 메시지가 발생했습니다. NameOfServiceReference.TableleofBooleanint를 System.Tuple 으로 변환 할 수 없습니다. Tuple 대신 ValueTuple 클래스를 사용해도 같은 오류가 발생했습니다. – JRB