zequion Ответов: 2

Wpf/winforms C# и ASP.NET с той же библиотекой DLL


I'm doing a program that has to work in Wpf/Winforms c# and in asp.net c# calling a dll that is common to both technologies.

When I need the structure of general variables, which also contains the information of each user, a function that exists in the dll returns it by reference so that any change in a variable is available at the moment throughout the program. This now works well. But, in Asp.net i need the same function to return the structure by reference or by value, with the session saved with the variables of each user. If returned by reference like in WPF/Winforms, in Asp.net all users would share the same values.

namespace Name_Comun
{   public struct St_Comun
    {   public int User;
        public string Name;
    }

   public class Cls_Comun
   {   // Structure of general variables
       public static Name_Comun.St_Comun StComun;

       public Cls_Comun()
      {  Name_Comun.Cls_Comun.StComun = new Name_Comun.St_Comun();
      }
   }
}

public void Anyfunction()
{   // (At present). Retrieves by reference the structure with the general variables.
    ref Name_Comun.St_Comun StComun = ref Name_Comun.Cls_Comun.Fcn_StComunGet();

   // Change a variable. The variable is saved by reference.
   StComun.User = 100;

   // Save the changes. (In Wpf/Winforms not save anything because it is a reference). In Aspx save the Session["StComun"].
   Name_ComunAdd.Cls_ComunAdd.Fcn_StComunSet (ref StComun);
}

// Function that returns the structure with the general variables.
public static ref Fcn_StComunGet()
{   // Returns the address of the static variable.
    ref Name_Comun.St_Comun StComun = ref Name_Comun.Cls_Comun.StComun;

    // (It is not possible at this time). I NEED to return the Session for ref or value. Like: return ref Session["StComun"] or return Session["StComun"]
   if (Aplication == Aspx) StComun = ref Session["StComun"];
   return StComun;
}

public static void Fcn_StComunSet(ref Name_Comun.St_Comun StComun)
{ if (Aplication != Aspx) return;
  if (Aplication == Aspx) Session["StComun"] = StComun;
}

What I explain is that a function returns the structure of general variables as ref to be able to modify variables and that the changes in the rest of the program are accessible. But if it is Aspx, taking into account that a Session of the structure must be used for each user, I do not know how to do it for the same function to return it, since that function I use it hundreds of times in all my functions.

I NEED:
I need that if it is Aspx, the function public static function ref Fcn_StComunGet() returns something similar to return ref Session ["StComun"].

It also helps if you return return Session ["StComun"], but keep in mind that the function returns ref, not value, in case the program is not Aspx.

If is not possible return ref Session["Variable"] then I need the function to return Session["Variable"], but this function is also used in WPF/Winforms and is now returning ref. In this way, at the moment that I modify a variable, it is available without saving.


Что я уже пробовал:

What have you tried
What have you tried
What have you tried

F-ES Sitecore

Не уверен, что я на 100% понимаю этот вопрос, но решение, вероятно, состоит в том, чтобы клонировать объект в asp.net чтобы каждый пользователь получил свою собственную копию.

Сеанс["xyz"] = myObject.Клон();

google клонирует объекты в c#, если вы не знаете, как это сделать.

[no name]

Я не об этом говорю. Я объясняю, что функция возвращает структуру общих переменных как ref, чтобы иметь возможность изменять переменные и что изменения в остальной части программы доступны. Но если это Aspx, то с учетом того, что сеанс структуры должен использоваться для каждого пользователя, я не знаю, как это сделать, чтобы одна и та же функция возвращала его, так как эта функция используется мной сотни раз во всех моих функциях.

МНЕ НУЖНО:
Мне нужно, чтобы если это Aspx, то функция public static function ref Fcn_StComunGet() возвращает что-то похожее на return ref Session ["StComun"].

Это также помогает, если вы возвращаете return Session ["StComun"], но имейте в виду, что функция возвращает ref, а не value, если программа не является Aspx.

2 Ответов

Рейтинг:
1

Vincent Maverick Durano

Привет,

Я не совсем уверен, что понимаю вас, но если вы пытаетесь синхронизировать данные и заставить клиентов (Windows/Web/Services) получать обновления, то вам, возможно, захочется пересмотреть свой подход. Сеть не имеет состояния, а сеансы ненадежны. Вам понадобится постоянное хранилище данных, такое как база данных, чтобы хранить данные, а не полагаться на сеансы. Существует целый ряд вещей которые могут привести к таинственному исчезновению состояния сеанса в том числе:

(1) истек тайм-аут состояния сеанса
(2) вы обновляете файл web.config или другой тип файла, который приводит к рециркуляции вашего домена приложений
(3) Ваш AppPool в IIS перерабатывается
(4) Вы обновляете свой сайт с большим количеством файлов, и ASP.NET проактивно уничтожает ваш домен приложений для перекомпиляции и сохранения памяти.

На вашем месте я бы использовал API/WebService для размещения данных, а не библиотеку классов/DLL. Именно здесь вы обрабатываете и управляете операциями CRUD базы данных. Затем API/WebService будет действовать как ваш центральный шлюз для широковещательной передачи информации и получения ваших WinForms и ASP.NET веб-приложения получают к нему доступ, чтобы получить данные.


Рейтинг:
1

zequion

I'm not talking about that. You have not understood the problem because you have to read it well and that takes time.

I raise my need to use a simple function that standardizes the return of a structure in ref mode to be able to modify variables at the moment and that are available in the rest of the program. I make a call to that function almost every function of the program, in hundreds of places.

It works well in WPF / WinForms but not in Asp.net, where there is a static dictionary that contains the information of each user's Session variables. To be able to return in ref mode, I need to be given the possibility to access that dictionary regardless of the duration of the information. If the information no longer exists, my function will create a new session.

Microsoft does not return that ref, so you can not standardize that pointer to the information, but that only happens in asp.net

Every time I find a precarious or serious failures in the code of Microsoft and I indicate it to him, the deaf ones become or they respond of arrogant form saying that I consider my program of another form. The serious errors that I have found do not correct them.

I have been working on something for a long time and serious failures in Sql Server are hurting me without Microsoft taking charge and nobody does anything:
Sql Server 2017 with Transact and synonyms Problems. Microsoft does not respond.

https://social.msdn.microsoft.com/Forums/en-US/6e1cb5ed-60fb-4d27-af97-9d31c8691139/sql-server-2017-with-transact-and-synonyms-problems-microsoft-does-not-respond?forum=transactsql

I do not want to extend more.


Richard Deeming

Если вы хотите ответить на решение, нажмите кнопку "есть вопрос или комментарий?" кнопка под этим решением. НЕ опубликуйте свой ответ как новое "решение".