У меня есть серверное приложение, работающее в Linux. Это приложение было
разработано с использованием файлов protobuf c и protobuf.rpc.c для связи RPC.
У меня есть клиентское приложение, которое работало на Windows. Оно было разработано в c # с использованием protobuf-net.dll и ProtobufRemote.dll для связи RPC. Оба приложения используют тот же файл proto, имеющий те же методы обслуживания.
Я могу создать прокси из клиентского приложения C # с приведенным ниже кодом.
using System.Configuration;
using System.Net.Sockets;
using ProtoBufRemote; // rpc reference
using StarCall; // proto file
#region Create client connection
Int32 port = Convert.ToInt32(ConfigurationManager.AppSettings["PORT"]);
TcpClient tcpClient = new TcpClient(ConfigurationManager.AppSettings["SERVERIP"].ToString(), port);
var controller = new RpcController();
var client = new RpcClient(controller);
var channel = new NetworkStreamRpcChannel(controller, tcpClient.GetStream());
channel.Start();
var service = client.GetProxy<Istarcall_services>();
if (service == null)
Console.WriteLine("error creating client..");
//now calls can be made, they will block until a result is received
Console.WriteLine("Client connected to Server....\n");
#endregion
Но всякий раз, когда я пытаюсь вызвать метод службы из клиентского приложения C #, как показано ниже, приложение зависает и не получает никакого ответа от серверного приложения Linux c.
try
{
Room_Config room = new Room_Config();
room.Room_Dial_Num = 1;
Room_Config roomRet = service.read_room(room); // service method
}
catch (Exception)
{
throw;
}
Приложение висит в коде ниже.
protected RpcMessage.Parameter EndAsyncCallHelper(string methodName, IAsyncResult asyncResult)
{
PendingCall pendingCall = (PendingCall)asyncResult;
pendingCall.AsyncWaitHandle.WaitOne(); // application hanging here
pendingCall.AsyncWaitHandle.Close();
if (pendingCall.IsFailed)
throw new InvalidRpcCallException(serviceName, methodName,
String.Format("Server failed to process call, returned error message: \"{0}\".",
pendingCall.ServerErrorMessage));
return pendingCall.Result;
}
В соответствии с вышеупомянутыми сценариями у меня есть следующие запросы.
Может ли этот протобуф удаленный c # dll помочь в создании связи из кода linux c. Если нет, пожалуйста, помогите мне, как создать канал связи с кодом Linux Linux.
Пожалуйста, укажите, есть ли альтернативный rpc dll для клиентского приложения c # для связи с linux protobuf c и файлом protobuf rpc.c.
Пожалуйста, скажите мне, если мой вышеупомянутый подход неверен, и исправьте подходящим решением.
Пожалуйста, помогите мне. Если не ясно, пожалуйста, отправьте на почту, указанную ниже.