2010-05-21 6 views
5

WCF 서비스 및 웹 클라이언트가 있습니다. 웹 서비스는 하나의 메소드 SubmitOrders를 구현합니다. 이 메서드는 주문 모음을 사용합니다. 문제는 서비스가 각 주문에 대해 개의 결과 (true 또는 false)를 반환해야한다는 것입니다. WCF 매개 변수를 out 또는 ref로 표시하면 의미가 없습니다. 무엇을 추천하나요?WCF 인터페이스 설계 : 없음 또는 참조 매개 변수 없음

[ServiceContact] 
public bool SubmitOrders(OrdersInfo) 

[DataContract] 
public class OrdersInfo 
{ 
    Order[] Orders; 
} 
+0

확인.이것은 WCF 특성에 대한 지식 부족이었습니다. 답변 해 주셔서 감사합니다. –

답변

11

WCF 매개 변수를 out 또는 ref로 표시하는 것은 의미가 없습니다.

out 매개 변수는 WCF에서 의미가 있습니다.

무엇을 권하고 싶습니까?

매개 변수를 사용하는 것이 좋습니다.


참고 1 : out 매개 변수가 사용자의 첫 번째 매개 변수로 이동합니다.

참고 2 : 예, 복잡한 유형의 개체를 WCF에서 반환 할 수 있습니다. 클래스에 [DataContract] 속성과 [DataMember] 속성으로 속성을 태그하십시오.

+0

나는 우리가 우리 자신의 서비스에서 광범위하게 사용했다고 동의한다. 또한 메서드를 IsOneWay = False로 표시하고 bool이 아닌 호출자에게 원하는 모든 데이터의 배열을 전달할 수 있습니다. –

+0

Err .. 알겠습니다. WCF가 클래스를 메시지 으로 직렬화하고 메시지가 서비스로 전송되었다고 생각했습니다. 출력 매개 변수는 클라이언트에게 약간의 백 메시지를 가정합니다 - 맞습니까? –

+0

OneWayAttribute를 추가하지 마십시오! 기본값은 요청/응답입니다. – Erup

1

주문 및 참/거짓 또는 튜플 배열을 보유하는 특수한 클래스입니다.

2

글쎄, 당신은 ref와 ref 매개 변수를 피하고 싶다면 언제나 성공적으로 제출 된 주문의 ID 배열을 반환 할 수 있습니다.

+1

@Captain : 특히 WCF에 대해서는 잘 모르겠지만 SOAP 서비스는 "out"매개 변수를 사용할 수 있습니다. 적어도 WCF는 SOAP 및 TCP/IP를 통해 의미가 있기 때문에 WCF가이를 지원한다고 생각합니다. –

1

방법은 같을 것이다 다음 OrderInfo의 각 항목이 같은 SubmissionStatusInfo있을 것이다

public OrdersInfo SubmitOrders(OrderInfo orders){ 
} 

:

class SubmissionStatusInfo{ 
enum Status { get; set; } 
string Message { get; set; } 
} 

Status : Submitted, Failed, Error
Message : 몇 가지 추가 정보를 제공하는 문자열 상태에 대해 ...

HTH

+0

FaultException 를 수행 할 수 있습니다. 오류를 다시 전달하는 것은 "우수 사례"입니다. – Erup

+0

그래, 그 말이 더 합리적인 ... – Sunny

3

반환 값으로 복잡한 형식 (다른 클래스는 DataContract 특성 사용)을 사용하십시오.

[ServiceContact] 
public OrdersResult SubmitOrders(OrdersInfo) 

[DataContract] 
public class OrdersInfo 
{ 
    Order[] Orders; 
} 

[DataContract] 
public class OrdersResult 
{ 
    ..... 
} 

처럼

또한 네, WCF 작업상의 out 매개 변수을 반환하는 의미가 Order[] Orders;

+0

다른 DataContract obj를 만들 필요가 없습니다. 그냥 매개 변수로 전달하십시오. – Erup

+0

두 가지 해결책이 모두 적용됩니다. 그가 param을 가지거나 복합 형을 반환하기를 원하는지 여부는 디자인에 따라 다릅니다. – Incognito

2

DataMember를 추가합니다. 이에 대한 응답으로 SOAP 메시지에는 전달 된 요소가 포함됩니다.

데이터 전송에 대한 MSDN에 좋은 내용이 있습니다 Specifying Data Transfer in Service Contracts

는 또한, 당신은 SubmitOrders에 OperationContractAttribute를 (안 ServiceContractAttribute를)를 사용합니다.

+0

고맙습니다. 이것은 그냥 오타입니다. 이것은 copypaste가 아니며, 저는 서둘러서 문제를 단순화하고 코드를 단순화했습니다. –

관련 문제