2013-02-06 2 views
3

다음은 WCF 서비스가 사용자로부터 동시에 5 개의 값을 가져오고 처음 두 값의 추가 응답을 AddedResult, 추가 된 결과의 빼기 및 SubtractedResult 로의 세 번째 값, SubtractedResult와 네 번째 값의 곱셈 MultipliedResult 및 multipliedResult 및 DividedResult와 같은 5 번째 값의 나누기.하나의 WCF 요청에서 여러 개의 반환 값을 보내는 방법은 무엇입니까?

나는 이것이 비현실적 인 것처럼 보이지만 이것들과 함께 사전 테스트를하려고 노력하고 있지만 WCF에 새로운 사람이라면 정말 감사 할 것입니다.

public interface IService1 
{ 

    [OperationContract] 
    string GetValuesForCalculation(int value1, int value2, int value3, int value4, int value5); 


    // TODO: Add your service operations here 
} 


public class Service1 : IService1 
{ 

    public int GetValuesForCalculation(int value1, int value2, int value3, int value4, int value5) 
    { 
     int AddedResult; 
     int SubtractedResult; 
     int MultipliedResult; 
     int DividedResult; 

     AddedResult = (value1 + value2); 
     SubtractedResult = (AddedResult - value3); 
     MultipliedResult = (SubtractedResult - value4); 
     DividedResult =(MultipliedResult/value5); 

     return AddedResult; 
     return SubtractedResult; 
     return MultipliedResult; 
     return DividedResult; 
    } 


} 

동시에 4 개의 값을 반환하려면 어떻게합니까?

+0

실제 질문을 더 분명하게하기 위해 게시물을 편집했습니다. 내 해석이 잘못 되었다면 그것을 자유롭게 바꿔라. –

답변

7

DataContract을 작성하여 해당 오브젝트를 리턴해야합니다. DataContractsMSDN Page

ReturnValue 클래스가 자동으로 클라이언트 프록시를 생성하는 동일한 코드에 의해 생성됩니다 클라이언트 측면에서
[ServiceContract()] 
interface IService1 
{ 
    [OperationContract] 
    ReturnValue GetValuesForCalculation(int value1, int value2, int value3, int value4, int value5); 
} 


public class Service1 : IService1 
{ 
    public ReturnValue GetValuesForCalculation(int value1, int value2, int value3, int value4, int value5) 
    { 
     int AddedResult; 
     int SubtractedResult; 
     int MultipliedResult; 
     int DividedResult; 

     AddedResult = (value1 + value2); 
     SubtractedResult = (AddedResult - value3); 
     MultipliedResult = (SubtractedResult - value4); 
     DividedResult =(MultipliedResult/value5); 

     var returnValue = new ReturnValue(AddedResult, SubtractedResult, MultipliedResult,DividedResult); 

     return returnValue ; 
    } 
} 

[DataContract] 
public class ReturnValue 
{ 
    public ReturnValue(int addedResult, int subtractedResult, int multipliedResult, int dividedResult) 
    { 
     AddedResult = addedResult; 
     SubtractedResult = subtractedResult; 
     MultipliedResult = multipliedResult; 
     DividedResult = dividedResult; 
    } 

    [DataMember] 
    public int AddedResult {get; set;} 

    [DataMember] 
    public int SubtractedResult {get; set;} 

    [DataMember] 
    public int MultipliedResult {get; set;} 

    [DataMember] 
    public int DividedResult {get; set;} 
} 

여기

(이 시각 스튜디오 나 svcutil.exe에 내장 된 도구 일)입니다 .

+0

안녕하세요 스콧 모든 답변에 대한 답변 주셔서 감사합니다 괜찮아요하지만 만약 내가 그 결과가 null이오고있어 null을 알지 못한다. – nzdev

+1

답을 업데이트했습니다. 각 항목에'[DataMember]'를 추가 했습니까? 추가 한 후에 프록시 클래스를 다시 만들어야합니까? 또한 디버거를 사용하여 단계를 수행 한 경우 응답을 보내기 전에 'returnValue' 값이 null이 아니거나 수신 측에서 null이 아닌 송신 측에서 null인지 확인하십시오. –

+0

스코트 어 알았어, 내 실수가 당신에게 대답 해 주셔서 감사합니다. – nzdev

2

구조체를 만들어 동일한 호출에서 모두 반환해야합니다.

public class Service1 : IService1 
{ 

public int GetValuesForCalculation(int value1, int value2, int value3, int value4, int value5) 
{ 
    int AddedResult; 
    int SubtractedResult; 
    int MultipliedResult; 
    int DividedResult; 

    AddedResult = (value1 + value2); 
    SubtractedResult = (AddedResult - value3); 
    MultipliedResult = (SubtractedResult - value4); 
    DividedResult =(MultipliedResult/value5); 

    CallResponse myResponse = new CallREsponse {AddResult = AddedResult, 
       SubtractResult = SubtractedResult, 
       MultiplyResult = MultipliedResult, 
       DivideResult = DividedResult}; 
    return myResponse; 
} 


} 
public struct CallResponse 
{ 
int AddResult; 
    int SubtractResult; 
    int MultiplyResult; 
    int DivideResult; 
} 
+1

DataContract없이 WCF로 값을 반환하거나 Serializeable을 작성하기 위해 구조체를 사용할 수 있습니까? 결코 알지 못했다. –

+0

나는 당신이 할 수 있어야한다고 생각합니다. 직렬화 가능 속성 또는 데이터 계약 속성을 설정하기 전에 클래스를 사용하여이 작업을 수행했습니다. 데이터 계약을 지정하는 유일한 이유는 리턴되는 것을 완전히 제어하려는 경우입니다. 그렇지 않으면 자동으로 수행됩니다 –

+0

안녕하세요 brian 그것은 새로운 callresponse의 매개 변수가 보호 수준으로 인해 액세스 할 수 없다고 말합니다. 회신에 대한 답변은 – nzdev

관련 문제