реализация обратного вызова с клиентом WWSAPI и сервисом WCF

Я изучаю WCF-WWSAPI и пытаюсь развить Пример ICalculator по TCP и дуплексным вызовам с визуальным клиентом C ++ и C # на службе …
В основном, мой клиент — программа пытается добавить 555 к сервисному номеру, и сервис позвонит клиенту, чтобы напечатать результат на экране посредством обратного вызова …
client -> service dommunications работает нормально, мой клиент может отправлять значения в службу, вызывающую функцию AddTo, и она будет работать. Но по какой-то причине мой клиент не получает значения для печати из сервиса …

это то, что делает мой клиент:

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);
}

любая помощь / предложение будет высоко ценится

большое спасибо вам

Manuel

2

Решение

Ладно, я понял!! это правильный способ получения сообщений от службы 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 !!!!

хорошо для меня!!!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]