2012-12-20 5 views
2

WCF-WWSAPI를 배우고 있고 Visual C++ 클라이언트와 C#을 사용하여 ICalculator example over TCP and duplex calls을 개발 중입니다. 기본적으로 내 클라이언트 프로그램이 서비스에 555를 추가하려고합니다. 번호 및 서비스는 콜백을 통해 화면에 결과를 인쇄하기 위해 클라이언트를 호출합니다 ... 클라이언트 -> 서비스 dommunications 잘 작동, 내 클라이언트가 AddTo 기능을 호출하는 서비스에 값을 보낼 수 있으며 작동합니다. 이 콜백을 데리러 내 서버 생성자가WWSAPI 클라이언트 및 WCF 서비스를 사용하는 콜백 구현

hr = WsCreateMessageForChannel(
    threadInfo->channel, 
    NULL, 
    0, 
    &message, 
    error); 
if (FAILED(hr)) 
{ 
    PrintError(hr, error); 
} 

const WS_MESSAGE_DESCRIPTION* messageDescriptions[] = { 
    // Result callback message 
     &tempuri_org_wsdl.messages.ICalculatorDuplex_Equals_OutputCallbackMessage,  //<-- CHECK ON TEMPURI.ORG.WSDL.H 
    // Equation callback message 
     &tempuri_org_wsdl.messages.ICalculatorDuplex_Equation_OutputCallbackMessage  //<-- CHECK ON TEMPURI.ORG.WSDL.H 
}; 
for (;;) // to receive all potential callback messages in an infinite loop 
{ 
    void* callbackBody = NULL; 
    ULONG index = 0; 
    hr = WsReceiveMessage(
     threadInfo->channel, 
     message, 
     messageDescriptions, 
     WsCountOf(messageDescriptions), 
     WS_RECEIVE_OPTIONAL_MESSAGE, 
     WS_READ_REQUIRED_POINTER, 
     heap, 
     callbackBody, <===this VALUE is 0x000000 from the server and I send an int 
     sizeof(callbackBody), 
     &index, // The returned index is used to determine which callback is received 
     NULL, 
     error); 

이다 : 그러나 어떤 이유로 내 클라이언트가 값을받지 않는 것은

이 내 클라이언트가하는 일입니다 ... 서비스에서 인쇄하는

public CalculatorService() 
    { 
     result = 0.0D; 
     equation = result.ToString(); 
     callback = OperationContext.Current.GetCallbackChannel<ICalculatorDuplexCallback>(); 
    } 

이는 콜백 계약에 내 기능입니다 :

public void AddTo(double n) 
    { 
     Console.WriteLine("Dentro de AddTo"); 
     result += n; 
     equation += " + " + n.ToString(); 
     callback.Equals(result); 
    } 

을 뉴욕 도움말/제안이 higly 대단히 감사합니다

을 감상 할 수있다

마누엘

+0

어떤 도움을 주시겠습니까? –

답변

0

겠어요 OK! 이 올바른 WCF 서비스에서 메시지를받을 수있는 방법입니다

for (;;) // to receive all potential callback messages in an infinite loop 
{ 
    void* callbackBody; 
    ULONG index = 0; 
    hr = WsReceiveMessage(
     threadInfo->channel, 
     threadInfo->message, 
     //&messageDescriptions[0], 
     messageDescriptions, 
     WsCountOf(messageDescriptions), 
     WS_RECEIVE_OPTIONAL_MESSAGE, 
     WS_READ_REQUIRED_POINTER, 
     heap, 
     &callbackBody, 
     sizeof(callbackBody), 
     &index,      // The returned index is used to determine which callback is received 
     NULL, 
     error); 

지금은 WWSAPI 및 netTcpBinding를 사용하여 콜백으로 데이터를 얻을 수 있습니다 !!!!

나에게 좋습니다!