Ive에 netTcpBinding 및 콜백 메소드를 사용하는 호스트/클라이언트 WCF 서비스 및 클라이언트가 있습니다. 콜백WCF, 이중 콜백, 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>
프록시
[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);
}
클라이언트 인스턴스는
public MainForm()
{
InitializeComponent();
InstanceContext context = new InstanceContext(new AlarmCallback());
client = new AlarmServerClient(context);
}
내가 가진 문제는 바인딩 recieveTimeout 트리거 후, 클라이언트가 오류 상태로 전환한다는 것입니다 듣기 클라이언트를 닫습니다 콜백.
sysinternals의 TCPVIEW를 사용하여 수신 대기 포트 드롭을 볼 수 있습니다.
채널을 계속 사용하는 경우 시간 제한이 트리거되지 않으므로 여러 메시지가 확인을 통해 전달되므로 서버/클라이언트에 대한 WCF 메시지의 오류가 발생하지 않습니다.
나는 receiveTimeout이 TCP를 통한 WCF 메시지의 응답이 실패했는지 감지 할 수있는 방법을 제공한다고 생각 했습니까? 연결에 오류가있는 이유는 무엇입니까? 타임 아웃 기간 동안 생성 된 콜백 객체가 없으면 채널이 닫히는 것으로 거의 나타납니다?
내가 뭘 잘못하고 있니?
어떤 해결책이 있습니까? –