0
デュプレックスNetTcpサービスを作成したい。私は最良のアプローチが何であるか分かりません。 私は定期的にサーバーに状態を送信するクライアントを持っており、クライアント要求とは関係なく定期的にデータを送信するサーバーがあります。 私は2つの接続を避け、サーバー上のクライアントについて何も知らないので、クライアントによって開かれた接続を使用する必要があります。 クライアントが定期的にステータス情報を送信すると言ったように。 しかし、クライアントから確立された接続チャネルを、クライアントにデータを送信するために独立して使用するにはどうすればよいですか。また、サーバーからクライアントに送信されるデータには応答が必要です。WCF NetTcpデュプレックスチャネル非依存通信
[ServiceContract(CallbackContract = typeof(IStatusServiceCallBack))]
public interface IStatusService
{
[OperationContract]
void SendStatus(int statusCode, string statusMessage);
}
public interface IStatusServiceCallBack
{
// I know IsOneWay=true cannot work, but how to return value????
[OperationContract(IsOneWay = true)]
int SendPayTransaction(PayTransaction payTransaction);
}
public class StatusService : IStatusService
{
public IStatusServiceCallBack Proxy
{
get
{
return OperationContext.Current.GetCallbackChannel
<IStatusServiceCallBack>();
}
}
public void SendNotification(int statusCode, string statusMessage)
{
Console.WriteLine($"\nClient status : {(statusCode)} {statusMessage}");
}
// Is this possible???
public int SendPayTransaction(PayTransaction payTransaction){
return Proxy.SendPayTransaction(payTransaction)
}
}
class Program
{
static void Main(string[] args)
{
var svcHost = new ServiceHost(typeof(NotificationService));
svcHost.Open();
bool closeService = false;
do{
string command = Console.ReadLine();
if(command == "Send"){
// Is this possible???????
int result = svcHost.SendPayTransaction(new PaymentTransaction(){Amount = 5.50});
Console.WriteLine($"Result of payment : {result}");
} else if (command == "exit"){
closeService = true;
}
}while(!closeService);
}
}