Session .asmx web服务中的每次呼叫存储

Session .asmx web服务中的每次呼叫存储,session,asmx,Session,Asmx,我们有一个现有的.asmx web服务,它使用静态集合来存储表单处理过程中遇到的错误。不幸的是,正如您可能已经猜到的,这不是线程安全的。因此,我们正在寻找一种线程安全的方法来实现这一点。我希望避免在每次调用时来回传递错误对象。我目前已经重新编写了它,以使用HttpContext.Current.Items集合启用Asp.Net兼容性,会话也是如此,但我想知道是否有人能想出更好的方法来实现这一点?在.asmx web服务中是否存在我不知道的某种会话状态(如存储) 这是修复程序的当前实现。我有没有更

我们有一个现有的.asmx web服务,它使用静态集合来存储表单处理过程中遇到的错误。不幸的是,正如您可能已经猜到的,这不是线程安全的。因此,我们正在寻找一种线程安全的方法来实现这一点。我希望避免在每次调用时来回传递错误对象。我目前已经重新编写了它,以使用HttpContext.Current.Items集合启用Asp.Net兼容性,会话也是如此,但我想知道是否有人能想出更好的方法来实现这一点?在.asmx web服务中是否存在我不知道的某种会话状态(如存储)

这是修复程序的当前实现。我有没有更好的办法

public class ContextErrorCollection
{
    public static void AddToErrorCollection(string error)
    {
        var nsec = ErrorCollection;
        nsec.Add(error);
        ErrorCollection = nsec;
    }

    public static List<string> ErrorCollection
    {
        get
        {
            var nsec = HttpContext.Current.Items["ErrorCollection"] as NonStaticErrorCollection ?? new NonStaticErrorCollection();
            return nsec.ItemList;
        }

        set
        {
            var nsec = new NonStaticErrorCollection();
            foreach (string error in value)
            {
                nsec.ItemList.Add(error);
            }
            HttpContext.Current.Items["ErrorCollection"] = nsec;
        }

    }
}

public class NonStaticErrorCollection
{
    public string[] list()
    {
        return m_sList.ToArray();
    }

    public List<string> ItemList
    {
        get
        {
            if (m_sList == null) return new List<string>();

            return m_sList;
        }
    }

    private readonly List<string> m_sList = new List<string>();
}

//Calling Code
ContextErrorCollection.AddToErrorCollection(string.Format("Adding error number {0} to list...", i));
我知道依赖注入类型的解决方案更可取,但是1实际上没有足够的时间来实现它,2这个应用程序将在大约6个月内重写

提前谢谢

-内森