我对编程很陌生,所以如果我的问题不够具体,请耐心等待。现在我正在尝试对我的服务器进行简单的客户端登录。所以服务端 App 知道连接了哪些用户。当客户端连接时,我希望在更新用户列表的服务器上触发一个事件。但它没有,我不知道为什么。希望你能帮忙。
在代码中,我删除了用户在 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();
    }
}
网络服务类:
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);
            }
        }
    }
}
用户信息类:
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);
        }
    }
}