Ive bir Sunucu/İstemci WCF hizmeti ve NetTcpBinding kullanan istemci ve bir geri çağırma yöntemi var. geri arama ileWCF, Dubleks geri arama, recieveTimeout NetTcpBinding
<bindings>
<netTcpBinding>
<binding name="tcp_Unsecured" receiveTimeout="00:01:00" sendTimeout="00:01:00">
<security mode="None" />
<reliableSession enabled="true" ordered="true" inactivityTimeout="00:10:00"/>
</binding>
</netTcpBinding>
</bindings>
Vekil
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(Namespace="http://dotnetaddict.dotnetdevelopersjournal.com/wcf.samples", ConfigurationName="AlarmServer", CallbackContract=typeof(AlarmServerCallback), SessionMode=System.ServiceModel.SessionMode.Required)]
public interface AlarmServer
{
[System.ServiceModel.OperationContractAttribute(IsOneWay=true, Action="http://dotnetaddict.dotnetdevelopersjournal.com/wcf.samples/AlarmServer/RegisterAlarm")]
void RegisterAlarm(System.DateTime alarmTime, string clientName, string reminderMessage);
[System.ServiceModel.OperationContractAttribute(IsOneWay = true, Action = "http://dotnetaddict.dotnetdevelopersjournal.com/wcf.samples/AlarmServer/unRegisterAlarm")]
void unRegisterAlarm(string clientName);
[System.ServiceModel.OperationContractAttribute(IsOneWay = true, Action = "http://dotnetaddict.dotnetdevelopersjournal.com/wcf.samples/AlarmServer/broadcastMessage")]
void broadcastMessage(string msg);
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public interface AlarmServerCallback
{
[System.ServiceModel.OperationContractAttribute(IsOneWay=true, Action="http://dotnetaddict.dotnetdevelopersjournal.com/wcf.samples/AlarmServer/SignalAlarm")]
void SignalAlarm(string reminderMessage);
[System.ServiceModel.OperationContractAttribute(IsOneWay = true, Action = "http://dotnetaddict.dotnetdevelopersjournal.com/wcf.samples/AlarmServer/displayMessage")]
void displayMessage(string msg);
}
istemci örneği
public MainForm()
{
InitializeComponent();
InstanceContext context = new InstanceContext(new AlarmCallback());
client = new AlarmServerClient(context);
}
Ben sorun bağlayıcı recieveTimeout tetikler sonra, istemci hatalı duruma geçer olmasıdır ve dinleme müşterilerine kapatır geri aramak.
Ben sysinternals gelen TCPView kullanarak dinleme portu damla görebilirsiniz. birden fazla mesaj olarak Sunucusu/Müşteriye WCF mesajında onun değil bir arıza, ok akacaktır böylece
meşgul kanalı tutarsanız, mola, tetiklemez.
Ben receiveTimeout TCP üzerinde WCF mesajdan bir cevap başarısız olursa algılamak için bir yol sağlamak için tasarlanmıştır düşündüm? Bağlantı neden hatalı? Neredeyse zaman aşımı süresinden için oluşturulan hiçbir geri arama nesnesi varsa, kanal daha sonra kapanmış görünüyor?Neyi yanlış yapıyorum?
Bunun için herhangi bir çözüm buldunuz mu? –