Я довольно новичок в программировании, поэтому несите меня, если мой вопрос недостаточно конкретный. Сейчас я пытаюсь сделать простой клиентский вход на моем сервере. Таким образом, приложение сервера знает, какие пользователи подключены. Когда клиент подключается, я хочу, чтобы на сервере запускалось событие, которое обновляет список пользователей. Но это не так, и я не могу понять, почему. Надеюсь, ты поможешь.Wpf Сервер/клиентский вход. Проблемы с событиями
В кодах я удалил, как пользователи должны отображаться в serverApp. Прямо сейчас мне просто нужно, чтобы мероприятие работало.
В моей библиотеке службы:
INetworkService контракта:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace NetworkLib
{
[ServiceContract]
public interface INetworkService
{
[OperationContract]
void Logon(UserInfo userInfo);
[OperationContract]
void Logout();
}
}
NetworkService Класс:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace NetworkLib
{
public class NetworkService : INetworkService
{
public event EventHandler UserListChanged;
public void Logon(UserInfo userInfo)
{
OnUserListChanged();
}
public void Logout()
{
OnUserListChanged();
}
private void OnUserListChanged()
{
var handler = UserListChanged;
if (handler != null)
{
handler(this, EventArgs.Empty);
}
}
}
}
UserInfo Класс:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
namespace NetworkLib
{
[DataContract]
public class UserInfo
{
[DataMember]
public string Name;
}
}
В моей ServerApp (WPF):
using System.ServiceModel;
using NetworkLib;
namespace ServerApp
{
public partial class MainWindow : Window
{
NetworkService networkService;
public MainWindow()
{
InitializeComponent();
ServiceHost host = new ServiceHost(typeof(NetworkService));
host.Open();
networkService = new NetworkService();
networkService.UserListChanged += networkService_UserListChanged;
}
private void networkService_UserListChanged(object sender, EventArgs e)
{
MessageBox.Show("It Works!");
}
}
}
В моем ClientApp (WPF): (Сделал ссылку на службу к серверу)
namespace ClientApp
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
ServiceReference.NetworkServiceClient proxy = new ServiceReference.NetworkServiceClient();
ServiceReference.UserInfo userInfo = new ServiceReference.UserInfo();
userInfo.Name = "Test";
proxy.Logon(userInfo);
}
}
}
С помощью того, что ilya.dorofeev сказал о создании одного экземпляра NetworkService [ServiceBehavior (InstanceContextMode = InstanceContextMode.Single)] и предоставить хосту этот экземпляр, как описано, он работает. Спасибо :) – user1077186