【发布时间】:2016-11-23 15:39:21
【问题描述】:
我正在使用有关创建 WCF 服务的教程中的示例代码,但它只工作了一半。当它被硬编码和检索列表工作时,添加到列表工作。但是,使用例程添加或修改列表不起作用。这是代码: BookData.cs
using System.Runtime.Serialization;
namespace BookServicesV2
{
[DataContract]
public class BookData
{
[DataMember]
public int BookID { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public string Author { get; set; }
[DataMember]
public decimal Price { get; set; }
}
}
BookService.cs:
using System.Collections.Generic;
namespace BookServicesV2
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in both code and config file together.
public class BookService : IBookService
{
private List<BookData> _books;
private BookService()
{
_books = new List<BookData>();
var book = new BookData { BookID = 1, Author = "Shakespeare", Title = "To Be or Not To Be", Price = 1.49M };
_books.Add(book);
book = new BookData { BookID = 2, Author = "Mark Twain", Title = "Not Dead Yet", Price = 3.50M };
_books.Add(book);
}
#region IBookService Members
public void AddBook(BookData book)
{
if (book != null) _books.Add(book);
}
public void UpdatePrices(decimal increaseAmmount)
{
foreach (var book in _books)
{
book.Price += increaseAmmount;
}
}
public List<BookData> GetBooks()
{
return _books;
}
#endregion
}
}
当我启动 WCF 测试客户端时,GetBooks 会检索两本硬编码的书籍。当我使用 AddBook 或 UpdatePrices 然后使用 GetBooks 时,什么都没有改变。我基本上是在学习 c# 和 WCF,所以我完全被难住了。谢谢!
【问题讨论】:
-
您是否调试过您的 add 和 update 方法以查看它们是否真的被客户端点击以及进入该方法的 book 是否为 null?
-
我自己使用 WCF 已经有一段时间了,但我猜问题是每次调用
GetBooks时都会得到一个新的BookService实例。您需要确保您的列表是持久的,例如在数据库中。 -
.. 或者只是确保您的范围已修改..
-
正如@DirkVollmar 指出的那样,每次调用都会创建一个 _books 变量的新实例。您将其定义为静态示例,如下所示:
private static List<BookData> _books