public ref class RequestMessage
{
public:
[ProtoMember(1)]
Int32 Number1;
[ProtoMember(2)]
Int32 Number2;
};
// Response message declared as managed class.
public ref class ResponseMessage
{
public:
[ProtoMember(1)]
Int32 Result;
};
void OnMessageReceived(System::Object ^sender, TypedRequestReceivedEventArgs<RequestMessage^> ^e);
int main(array<System::String ^> ^args)
{
ISerializer ^aSerializer = gcnew ProtoBufSerializer();
IDuplexTypedMessagesFactory ^aReceiverFactory = gcnew DuplexTypedMessagesFactory(aSerializer);
IDuplexTypedMessageReceiver<ResponseMessage^, RequestMessage^> ^aReceiver =aReceiverFactory->CreateDuplexTypedMessageReceiver<ResponseMessage^, RequestMessage^>();
aReceiver->MessageReceived += gcnew System::EventHandler<Eneter::Messaging::EndPoints::TypedMessages::TypedRequestReceivedEventArgs<RequestMessage ^> ^>(&OnMessageReceived);
IMessagingSystemFactory ^aMessaging = gcnew TcpMessagingSystemFactory();
IDuplexInputChannel ^anInputChannel =aMessaging->CreateDuplexInputChannel("tcp://127.0.0.1:4502/");
aReceiver->AttachDuplexInputChannel(anInputChannel);
Console::WriteLine("The calculator service is running. Press ENTER to stop.");
Console::ReadLine();
aReceiver->DetachDuplexInputChannel();
return 0;
}
void OnMessageReceived(System::Object ^sender,TypedRequestReceivedEventArgs<RequestMessage ^> ^e)
{
ResponseMessage ^aResponseMessage = gcnew ResponseMessage();
aResponseMessage->Result = e->RequestMessage->Number1 + e->RequestMessage->Number2;
Console::WriteLine("{0} + {1} = {2}", e->RequestMessage->Number1, e->RequestMessage->Number2, aResponseMessage->Result);
// Send back the response message.
IDuplexTypedMessageReceiver<ResponseMessage^, RequestMessage^> ^aReceiver = (IDuplexTypedMessageReceiver<ResponseMessage^, RequestMessage^>^)sender;
aReceiver->SendResponseMessage(e->ResponseReceiverId, aResponseMessage);
}
上面的代码是使用协议缓冲区的RPC的服务器代码,但除了客户端之外,其他所有客户端都无法从服务器获得任何响应。同样的代码在C#中工作,但它不能使用C++。。。我认为我们可以用C++/CLI编写一个与C#代码相当的代码。但是这个代码不起作用,我的客户机使用C#代码很好。
我注意到没有调用OnMessageRecived()函数。
这里是本机C++和C#服务器代码的示例,但我希望使用纯托管C++
http://eneter.blogspot.in/2013/12/native-c-how-to-communicate-with-net.html
任何人都可以告诉我发生了什么……我该如何解决这个问题。