gpt4 book ai didi

c# - web方法执行后web服务类字段为null?

转载 作者:行者123 更新时间:2023-11-30 22:41:52 24 4
gpt4 key购买 nike

我的解决方案中有一个 Web 服务项目和一个 WPF 项目(用作客户端)。

表示 Web 服务的类非常简单,如下所示:

public class CardsGameService : System.Web.Services.WebService
{
private Card magicCard;

// Acts as a getter for magicCard field
[WebMethod]
public Card GetMagicCard()
{
return magicCard;
}

// Creates some random cards and sets the magicCard field
[WebMethod]
public Card[] GetNewCardSet()
{
Card[] cardSet = new Card[4];

for (int i = 0; i < 4; i++)
{
cardSet[i] = GetRandomCard();
}

Random random = new Random();
int index = random.Next(0, 3);

// This field does get its value and
// is not null when this method is executed
magicCard = cardSet[index];

return cardSet;
}
}

在我的客户端 WPF 代码隐藏类中,我正在实例化 CardsGameServiceSoapClient 服务 并调用返回卡片集的 GetNewCardSet() 网络方法。

问题是:
如果我想稍后调用 Web 方法 GetMagicCard(),它总是返回 null为什么?我只实例化了一次 CardsGameServiceSoapClient 服务,只要我运行我的客户端应用程序,这个对象就活着

最佳答案

因为 WebService 实例是在每次调用的基础上创建和丢弃的。如果要在多个 Web 服务调用之间共享状态,请使用静态字段。但请注意,您需要担心处理任何其他多线程代码时会遇到的同类问题。两个调用可能同时进行,因此您需要在适当的地方使用锁。

另外值得一提的是,IIS 可以并且将在任何时候以任何理由终止您的应用程序域,因此您不应该依赖该字段将无限期存在的事实。如果您需要它持久存在,请使用数据库或其他持久存储。

关于c# - web方法执行后web服务类字段为null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4675844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com