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);
}
?