【发布时间】:2025-12-15 15:00:02
【问题描述】:
我有一个使用带有 net.tcp 绑定的 WCF 双工的聊天项目。我在 IIS 7.5 中构建
但我遇到了与在客户端实现的回调有关的问题。当客户端点击断开连接按钮时,它可以正常工作,但万一客户端由于断开网络,计算机关闭等原因而崩溃。之后,服务无法正常工作。服务似乎也出错了。
我的聊天服务界面:
[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);
}
如何处理这个意外错误?
【问题讨论】:
标签: wcf