C# 简易WCF程序,服务方法在客户端程序中不起作用

C# 简易WCF程序,服务方法在客户端程序中不起作用,c#,wcf,C#,Wcf,我刚开始编写WCF服务,遇到了一个奇怪的问题。我不知道为什么客户机中调用的服务中的方法不能正常工作,并且并没有创建新书。listBooks方法id ok,因为它返回图书列表,但方法addBook不会在booksList中创建新书。但这种情况仅在我从客户机使用此方法时出现,因为在服务构造函数中调用的方法创建了一本书 以下是客户端代码: namespace LibraryClient { class Program { static ServiceReference.ServiceClien

我刚开始编写WCF服务,遇到了一个奇怪的问题。我不知道为什么客户机中调用的服务中的方法不能正常工作,并且并没有创建新书。listBooks方法id ok,因为它返回图书列表,但方法addBook不会在booksList中创建新书。但这种情况仅在我从客户机使用此方法时出现,因为在服务构造函数中调用的方法创建了一本书

以下是客户端代码:

namespace LibraryClient
{
class Program
{
    static ServiceReference.ServiceClient client;
    static void Main(string[] args)
    {

        client = new ServiceReference.ServiceClient();

        client.addBook(2, "some book", "some author"); //this is not working
        ServiceReference.Book[] books = client.listBooks();

        foreach(var book in books)
        {
            Console.WriteLine("{0}", book.title);
        }

        Console.ReadLine();

    }
}
}
和服务代码:

namespace LibraryService
{

public class Service : IService
{

    private static List<Book> booksList;
    private static List<User> usersList;



    public Service()
    {
        booksList = new List<Book>();
        usersList = new List<User>();
        addBook(1, "ANOTHER BOOK", "ANOTHER AUTHOR"); //this is working


    }

    public List<Book> listBooks()
    {

        return booksList;
    }

    public List<User> listUsers() { 
        return usersList;
    }

    public void addBook(int id, string title, string author)
    {
        booksList.Add(new Book(id,title,author));

    }

    }
}

在服务器端,每次调用服务时,都会创建服务类的新实例。创建一个新实例意味着将调用这个类的构造函数

只要看看你在构造器中做了什么:

booksList = new List<Book>();
usersList = new List<User>();

在服务器端,每次调用服务时,都会创建服务类的新实例。创建一个新实例意味着将调用这个类的构造函数

只要看看你在构造器中做了什么:

booksList = new List<Book>();
usersList = new List<User>();
private static readonly object syncRoot = new object();

public void addBook(int id, string title, string author)
{
    lock (syncRoot)
    {
        booksList.Add(new Book(id, title, author));
    }
}