私はnet.tcpバインディングでWCFデュプレックスを使用してチャットプロジェクトを持っています。私は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);
}
この予期しないエラーを処理する方法は?