C# WCF 的行为类似于单个用户实例

标签 c# asp.net wcf

我开发了一个在 IIS 中运行的新 WCF 服务和一个使用此服务的 ASP.NET Web 应用程序。在服务器上运行它时它工作正常。但是,当我通过 IE 浏览器和 Chrome 浏览器以多个用户(2 个用户)身份访问该服务时,我注意到当第二个用户登录时,他们看到的是与第一个用户 session 相关的数据,这使得超过 1 个用户无法访问一次使用该服务。我曾假设 WCF 服务会在服务配置后自动处理多个 session : [服务行为(InstanceContextMode=InstanceContextMode.PerSession)]

但似乎并不是这样。下面是我如何在服务中定义我的类以及如何初始化 MyGlob。如果有人能指出我做错了什么,我将不胜感激?

public UserMaster LoadUserDtls(string loggedInUserId, string userPassword)
      {
      try
         {
          // Create all objects required to bootstrap initial menu transaction
                MyGlob.CrtUserMaster();
                MyGlob.CrtEnterpriseMaster();
                MyGlob.CrtDataBaseIO();
                MyGlob.CrtExecuteTrans();
                MyGlob.CrtErrorMsgs();
                MyGlob.CrtPromptMsgs();
                MyGlob.CrtConnectionStrings();
                MyGlob.CrtLogMessages();
                MyGlob.CrtRuleTypeOpSeq();
                MyGlob.CrtErrMsgsList();
                MyGlob.CrtEnvironments();
                MyGlob.CrtPromptMsgsList();
                MyGlob.CrtConnStringList();
                MyGlob.CrtEnvironmentList();
                MyGlob.CrtLogMessagesDict();
                MyGlob.CrtRuleTypeOpSeqDict();
                MyGlob.CrtKeywordsDict();
                MyGlob.CrtCommands();
                MyGlob.CrtObjDict();
                MyGlob.CrtNextNumbers();
                MyGlob.CrtAppDistLstDict();
                MyGlob.CrtNextNumbersDict();
                g.MyDataBaseIO.ReceiveMyGlob(MyGlob);
                g.MyCommands.ReceiveMyGlob(MyGlob);
**Definition of Classes within the WCF Service**

namespace DCRules2
{
    public class globals
    {
        public static UserMaster MyUser;
        public static EnterpriseMaster MyEnterprise;
        public static TransactionHdr MyTransHdr;
        public static TransactionSeq MyTransSeq;
        public static TransactionsWaitingToLoad MyTransWaiting;
        public static ExecuteTrans MyExe;
        public static Commands MyCommands;
        public static ErrorMsgs MyErrMsgs;
        public static PromptMsgs MyPromptMsgs;
        public static ConnectionStrings MyConnString;
        public static Environments MyEnvironments;
        public static RuleTypeOpSeq MyRuleTypeOpSeq;
        public static LogMessages MyLogMessages;
        public static DataBaseIO MyDataBaseIO;
        public static ErrorsEncountered MyErrorsEncountered;
        public static DisplaySeq MyDisplaySeq;
        public static PassToServiceParms MyPassToServiceParms;
        public static RtnFromServiceParms MyRtnFromServiceParms;
        public static InputValues MyInpFldVal;
        public static Object MyVarObj;
        public static NextNumbers MyNextNumbers;
        public static TransOutput MyTransOutput;

        public static AppDistLst MyAppDistLst;

        public static List<TransactionHdr> MyTransHdrList;
        public static List<TransactionSeq> MyTransSeqList;
        public static List<Environments> MyEnvironmentList;
        public static List<ErrorMsgs> MyErrMsgsList;
        public static List<PromptMsgs> MyPromptMsgsList;
        public static List<ConnectionStrings> MyConnStringList;
        public static List<DisplaySeq> MyDisplaySeqList;
        public static List<TransactionsWaitingToLoad> MyTransWaitingList;
        public static List<ErrorsEncountered> MyErrorsEncounteredList ;
        public static List<InputValues> MyInpFldValList ;


        public static Dictionary<string, int> MyTagsDict;
        public static Dictionary<string, string> MyVarValuesDict;
        public static Dictionary<string, string> MyVarTypesDict;
        public static Dictionary<string, string> MyCondLvlsDict;
        public static Dictionary<string, string> MyRuleTypeOpSeqDict;
        public static Dictionary<string, string> MyLogMessagesDict;
        public static Dictionary<string, string> MyKeywordsDict;
        public static Dictionary<string, int[]> MyPrevSelDict;
        public static Dictionary<string, object> MyObjDict ;
        public static Dictionary<string, string> MyAppDistLstDict;
        public static Dictionary<string, string> MyNextNumbersDict;

        public static TransLvlValues MyTransLvlValues;
        public static SessionLvlValues MySessionLvlValues;
        public static AppLvlValues MyAppLvlValues;
        //*****************************
        // Create new Objects
        //*****************************
        public UserMaster CrtUserMaster()
        {
            MyUser = new UserMaster();
            return MyUser;
        }
        public EnterpriseMaster CrtEnterpriseMaster()
        {
            MyEnterprise = new EnterpriseMaster();
            return MyEnterprise;
        }
        public TransactionHdr CrtTransactionHdr()
        {
            MyTransHdr = new TransactionHdr();
            return MyTransHdr;
        }

        public TransactionSeq CrtTransactionSeq()
        {
            MyTransSeq = new TransactionSeq();
            return MyTransSeq;
        }

        public TransactionsWaitingToLoad CrtTransactionsWaitingToLoad()
        {
            MyTransWaiting = new TransactionsWaitingToLoad();
            return MyTransWaiting;
        }

        public ExecuteTrans CrtExecuteTrans()
        {
            MyExe = new ExecuteTrans();
            return MyExe;
        }

        public Commands CrtCommands()
        {
            MyCommands = new Commands();
            return MyCommands;
        }

        public ErrorMsgs CrtErrorMsgs()
        {
            MyErrMsgs = new ErrorMsgs();
            return MyErrMsgs;
        }

        public PromptMsgs CrtPromptMsgs()
        {
            MyPromptMsgs = new PromptMsgs();
            return MyPromptMsgs;
        }

        public ConnectionStrings CrtConnectionStrings()
        {
            MyConnString = new ConnectionStrings();
            return MyConnString;
        }

        public Environments CrtEnvironments()
        {
            MyEnvironments = new Environments();
            return MyEnvironments;
        }

        public RuleTypeOpSeq CrtRuleTypeOpSeq()
        {
            MyRuleTypeOpSeq = new RuleTypeOpSeq();
            return MyRuleTypeOpSeq;
        }

        public LogMessages CrtLogMessages()
        {
            MyLogMessages = new LogMessages();
            return MyLogMessages;
        }

        public DataBaseIO CrtDataBaseIO()
        {
            MyDataBaseIO = new DataBaseIO();
            return MyDataBaseIO;
        }

        public ErrorsEncountered CrtErrorsEncountered()
        {
            MyErrorsEncountered = new ErrorsEncountered();
            return MyErrorsEncountered;
        }

        public DisplaySeq CrtDisplaySeq()
        {
            MyDisplaySeq = new DisplaySeq();
            return MyDisplaySeq;
        }

        public PassToServiceParms CrtPassToServiceParms()
        {
            MyPassToServiceParms = new PassToServiceParms();
            return MyPassToServiceParms;
        }

        public RtnFromServiceParms CrtRtnFromServiceParms()
        {
            MyRtnFromServiceParms = new RtnFromServiceParms();
            return MyRtnFromServiceParms;
        }

        public InputValues CrtInputValues()
        {
            MyInpFldVal = new InputValues();
            return MyInpFldVal;
        }
        public Object CrtVarObj()
        {
            MyVarObj = new Object();
            return MyVarObj;
        }
        public NextNumbers CrtNextNumbers()
        {
            MyNextNumbers = new NextNumbers();
            return MyNextNumbers;
        }
        public AppDistLst CrtAppDistLst()
        {
            MyAppDistLst = new AppDistLst();
            return MyAppDistLst;
        }
        public TransLvlValues CrtTransLvlValues()
        {
            MyTransLvlValues = new TransLvlValues();
            return MyTransLvlValues;
        }
        public SessionLvlValues CrtSessionLvlValues()
        {
            MySessionLvlValues = new SessionLvlValues();
            return MySessionLvlValues;
        }
        public AppLvlValues CrtAppLvlValues()
        {
            MyAppLvlValues = new AppLvlValues();
            return MyAppLvlValues;
        }
        public TransOutput CrtTransOutput()
        {
            MyTransOutput = new TransOutput();
            return MyTransOutput;
        }
        //*****************************
        // Create new List Objects
        //*****************************


        public List<TransactionHdr> CrtTransHdrList()
        {
            MyTransHdrList = new List<TransactionHdr>();
            return MyTransHdrList;
        }

        public List<TransactionSeq> CrtTransSeqList()
        {
            MyTransSeqList = new List<TransactionSeq>();
            return MyTransSeqList;
        }

        public List<Environments> CrtEnvironmentList()
        {
            MyEnvironmentList = new List<Environments>();
            return MyEnvironmentList;
        }

        public List<ErrorMsgs> CrtErrMsgsList()
        {
            MyErrMsgsList = new List<ErrorMsgs>();
            return MyErrMsgsList;
        }

        public List<PromptMsgs> CrtPromptMsgsList()
        {
            MyPromptMsgsList = new List<PromptMsgs>();
            return MyPromptMsgsList;
        }

        public List<ConnectionStrings> CrtConnStringList()
        {
            MyConnStringList = new List<ConnectionStrings>();
            return MyConnStringList;
        }

        public List<DisplaySeq> CrtDisplaySeqList()
        {
            MyDisplaySeqList = new List<DisplaySeq>();
            return MyDisplaySeqList;
        }

        public List<TransactionsWaitingToLoad> CrtTransWaitingList()
        {
            MyTransWaitingList = new List<TransactionsWaitingToLoad>();
            return MyTransWaitingList;
        }
        public List<ErrorsEncountered> CrtErrorsEncounteredList()
        {
            MyErrorsEncounteredList = new List<ErrorsEncountered>();
            return MyErrorsEncounteredList;
        }

        public List<InputValues> CrtInpFldValList()         
        {
            MyInpFldValList = new List<InputValues>();
            return MyInpFldValList;
        }


        //*****************************
        // Create new Dictionary Objects
        //*****************************

        public Dictionary<string, int> CrtTagsDict()
        {
            MyTagsDict = new Dictionary<string, int>();
            return MyTagsDict;
        }

        public Dictionary<string, string> CrtVarValuesDict()
        {
            MyVarValuesDict = new Dictionary<string, string>();
            return MyVarValuesDict;
        }

        public Dictionary<string, string> CrtVarTypesDict()
        {
            MyVarTypesDict = new Dictionary<string, string>();
            return MyVarTypesDict;
        }

        public Dictionary<string, string> CrtCondLvlsDict()
        {
            MyCondLvlsDict = new Dictionary<string, string>();
            return MyCondLvlsDict;
        }

        public Dictionary<string, string> CrtRuleTypeOpSeqDict()
        {
            MyRuleTypeOpSeqDict = new Dictionary<string, string>();
            return MyRuleTypeOpSeqDict;
        }

        public Dictionary<string, string> CrtLogMessagesDict()
        {
            MyLogMessagesDict = new Dictionary<string, string>();
            return MyLogMessagesDict;
        }

        public Dictionary<string, string> CrtKeywordsDict()
        {
            MyKeywordsDict = new Dictionary<string, string>();
            return MyKeywordsDict;
        }

        public Dictionary<string, int[]> CrtPrevSelDict()
        {
            MyPrevSelDict = new Dictionary<string, int[]>();
            return MyPrevSelDict;
        }

        public Dictionary<string, object> CrtObjDict()
        {
            MyObjDict = new Dictionary<string, Object>();
            return MyObjDict;
        }
        public Dictionary<string, string> CrtAppDistLstDict()
        {
            MyAppDistLstDict = new Dictionary<string, string>();
            return MyAppDistLstDict;
        }
        public Dictionary<string, string> CrtNextNumbersDict()
        {
            MyNextNumbersDict = new Dictionary<string, string>();
            return MyNextNumbersDict;
        }
**Here is how I initialize MyGlob**
namespace DCRules2
 {
     [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
     class TransactionService : ITransaction
     {
         public static globals MyGlob = new globals();

         //public static globals MyGlob = globals.CrtGlobals();
         //globals MyGlob = g.MyGlob.CrtGlobals();
         RegDetails MyRegDetails;
         Object MyVarObj;
         DataSet MyDs;
         DataTable dt2;
         DataRow dtRow;

最佳答案

您的问题是“static”关键字。任何“静态”类都将在应用程序加载到内存中时创建一次。因此,单个实例将在所有请求之间共享。

关于C# WCF 的行为类似于单个用户实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36105484/

相关文章:

c# - 反射和方法使用

c# - ASP.Net 复选框确认消息不起作用

c# - WCF 发布/订阅并使用回调向特定用户发送数据

C# 电子邮件地址验证

c# - 登录尝试失败 WCF 错误

wcf - 可以使用 WCF 数据服务返回文件吗?

c# - PID Controller 积分项导致极度不稳定

c# - 旅行商问题,2-opt 算法 c# 实现

c# - UriBuilder 没有正确组合两个 URI

javascript - 使用javascript将值从td分配给asp.net hiddenfield