0
我有使用WCF雙工與net.tcp綁定的聊天項目。我已經內置IIS 7.5如何處理WCF中的意外錯誤連接
但我有問題與客戶端實現的回調有關。當客戶端點擊斷開連接按鈕時,它可以正常工作,但是如果客戶端崩潰了一些重新連接,例如斷開網絡連接,計算機關閉等。之後,服務無法正常工作。看來服務也會出錯。
我聊天服務接口:
[ServiceContract(Name="ServiceChat", SessionMode=SessionMode.Required, CallbackContract=typeof(IChatCallback))]
public interface IChat
{
[OperationContract]
bool Connect(Client client);
[OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = true)]
void Disconnect();
[OperationContract(IsInitiating = false)]
void Refresh();
[OperationContract(IsOneWay = true, IsInitiating = false)]
void Whisper(string target, string content);
[OperationContract(IsInitiating = false)]
Room[] GetRooms();
[OperationContract(IsInitiating = false)]
bool CreateRoom(string roomName);
[OperationContract(IsInitiating = false)]
bool JoinRoom(string roomName);
[OperationContract(IsOneWay = true, IsInitiating = false)]
void LeaveRoom(string roomName);
[OperationContract(IsOneWay = true, IsInitiating = false)]
void SayToRoom(string roomName, string content);
[OperationContract(IsOneWay = true, IsInitiating = false)]
void InviteMember(Client client, string roomName);
[OperationContract(IsOneWay = true, IsInitiating = false)]
void KickMember(Client member, string roomName);
[OperationContract(IsOneWay = true, IsInitiating = false)]
void DisconnectRoom(string roomName);
[OperationContract(IsOneWay = true, IsInitiating = false)]
void DisconnectAllRoom();
[OperationContract(IsOneWay = true, IsInitiating = false)]
void SendFile(string target, File file);
}
我的服務回調:
public interface IChatCallback
{
[OperationContract(IsOneWay=true)]
void RefreshClient(List<Client> clients);
[OperationContract(IsOneWay = true)]
void ReceiveWhisper(Message message);
[OperationContract(IsOneWay = true)]
void ReceiveRoomMessage(string roomName, Message message);
[OperationContract(IsOneWay = true)]
void ReceiveNotifyClientConnect(Client joinedClient);
[OperationContract(IsOneWay = true)]
void ReceiveNotifyClientDisconnect(Client leaver);
[OperationContract(IsOneWay = true)]
void ReceiveNotifyClientJoinRoom(Client joinedClient, string roomName);
[OperationContract(IsOneWay = true)]
void ReceiveNotifyClientLeaveRoom(Client leaver, string roomName, bool kicked);
[OperationContract(IsOneWay = true)]
void ReceiveNotifyClientDisconnectRoom(Client owner, string roomName);
[OperationContract(IsOneWay = true)]
void ReceiveInvitedMessage(Room room);
[OperationContract(IsOneWay = true)]
void ReceivedFile(File file);
}
如何處理這個意外的錯誤?