Я изучаю 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
Ладно, я понял!! это правильный способ получения сообщений от службы 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 !!!!
хорошо для меня!!!
Других решений пока нет …