Проблема с WCF сервисом
В чём проблема не работает метод PreesBut,
Вот интерфейс:
[ServiceContract(CallbackContract = typeof(IServerMethCallback))]
public interface ICheckersService
{
[OperationContract]
int Connect(string name);
[OperationContract]
void DisConnect(int id);
[OperationContract(IsOneWay = true)]
void SendMsg(string msg, int id);
[OperationContract(IsOneWay = true)]
void Press(string color, int butId);
}
public interface IServerMethCallback
{
[OperationContract(IsOneWay = true)]
void MsgCallback(string msg);
[OperationContract(IsOneWay = true)]
void ReturnColor(string msg);
}
Вот класс реализация: SendMsg работает, а PressBut нет
public int Connect(string name)
{
ServerUser user = new ServerUser()
{
ID = nextid,
Name = name,
operationContext = OperationContext.Current
};
nextid++;
SendMsg(user.Name + " connected ", 0);
users.Add(user);
return user.ID;
}
public void DisConnect(int id)
{
var user = users.FirstOrDefault(x => x.ID == id);
if (user != null)
{
users.Remove(user);
SendMsg(user.Name + " left ", 0);
}
}
public void SendMsg(string msg, int id)
{
foreach (var item in users)
{
string answer = DateTime.Now.ToShortTimeString();
var user = users.FirstOrDefault(i => i.ID == id);
if (user != null)
{
answer += ": " + user.Name + " ";
}
answer += msg;
item.operationContext.GetCallbackChannel<IServerMethCallback>().MsgCallback(answer);
}
}
public void Press(string color, int butId)
{
int[] arrBut = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64 };
foreach (var item in arrBut)
{
ServerButton sb = new ServerButton()
{
Id = item,
operationContext = OperationContext.Current
};
serverButtons.Add(sb);
}
foreach (var item in serverButtons)
{
var but = serverButtons.FirstOrDefault(i => i.Id == butId);
item.operationContext.GetCallbackChannel<IServerMethCallback>().ReturnColor("asdfdfcolor");
}
}
Вот клиент:
private void tbxMsg_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
if (client != null)
{
client.SendMsg(tbxMsg.Text, ID);
tbxMsg.Text = string.Empty;
}
}
}
void OnFigPress(object sender, EventArgs e)
{
pressedButton = sender as Button;
int idB = map[pressedButton.Location.Y / cellSize, pressedButton.Location.X / cellSize];
if (client != null)
{
client.Press("somemessg", idB);
}
}
Вроде всё одно и тоже, но метод PressBut не работает.