ASP.NET webservis klient

0

Buduję klienta desktopowego opartego na webservisie (klient chatowy). Mam problem z przesyłaniem listy przez sesje tzn. pomimo że sesja została utworzona, przy ponownym odwołaniu się do niej ona już nie istnieje po mimo że działa w przeglądarce co może być przyczyną, zanikania sesji?

tworzenie sesji

[WebMethod(EnableSession = true)]

    public void dodajdolisty(string login)
    { bool jest = false;
 
        
        if (Session["uzytkownicy"] != null)
        {
        listaOsob = (List<string>)Session["uzytkownicy"];
            
            foreach(string s in listaOsob){
                if (s == login) { jest = true; break; }
            
            }
            if (!jest)
            {
                listaOsob.Add(login);
                Session["uzytkownicy"] = listaOsob;
            }
        }
        else
        {
            listaOsob.Add(login);
            Session["uzytkownicy"] = listaOsob;////debuger pokazuje że sesja została utworzona
           
        }
    }
pobieranie
<code class="c#">

 public List<string> pobierzzlisty()
        {
          
               List<string> list=new List<string>();
             list = (List<string>)Session["uzytkownicy"];////sesja jest null

                return list;}///null

0

Hej,

Probowales dodac "static" do metody dodajdolisty() ? To w teorii powinno dac dostep do Sesji w obrebie tego samego procesu.

0

Nic z tego wywala mi błąd (nawet się nie kompiluje), odnośnie tego że Session jest nie statyczny
nie działa też to:

 HttpContext.Current.Session["test"] = "testString";
0

Dobra udało mi się to załatwić to należało tylko dodać w kliencie następującą linijkę

 web.CookieContainer = new System.Net.CookieContainer(); 

Teraz inne pytanie jak zamienić metodę pobierzzlisty(), tak aby zwracała string[]

 public string [] pobierzzarray()
           {
             List<string> list = new List<string>();
               if (Session["uzytkownicy"] != null)
                   list = (List<string>)Session["uzytkownicy"];
         
     string[] s = new string[list.Count];
              for (int i = 0; i < list.Count; i++ ) {
                  s[i] = list.ElementAt(i);
              
              }

               return s;
           } 

Zapewne dodać serializacje ale jak to zrobić?

0

List<string> można łatwo zamienić w string[] za pomocą metody ToArray.

0
somekind napisał(a)

List<string> można łatwo zamienić w string[] za pomocą metody ToArray.

Próbowałem i tego ale dalej mam komunikat związany z rzutowaniem

0

Widzisz wróżkę w moim awatarze? :|
Jaki komunikat?

0

Wybacz o to on:

System.InvalidOperationException: Wystąpił błąd podczas generowania dokumentu XML. ---> System.InvalidCastException: Nie można rzutować obiektu typu 'System.String[]' na typ 'System.Collections.Generic.List`1[System.String]'.

Może do końca wyjaśnię o co mi chodzi. Po zbudowaniu klienta w C# (wszystko działa jak należy), przyszła pora na Jave i tu nie działa do końca tak jak powinno wygenerowało mi wszystkie metody z WSDL ale nie widzi mi obiektów z metody pobierzzlisty tablica jest pusta może jak bym zamienił tą metodę tak aby zwracała tablicę stringów to by zadziałało

0

Ale gdzie masz ten błąd?
Bo taki kod jest prawidłowy:

public string[] pobierzzarray()
{
    List<string> list = new List<string>();
    if (Session["uzytkownicy"] != null)
        list = (List<string>)Session["uzytkownicy"];

    return list.ToArray();
} 
0
somekind napisał(a)

Ale gdzie masz ten błąd?
Bo taki kod jest prawidłowy:

public string[] pobierzzarray()
{
    List<string> list = new List<string>();
    if (Session["uzytkownicy"] != null)
        list = (List<string>)Session["uzytkownicy"];

    return list.ToArray();
} 

Po uruchomieniu metody w przeglądarce, debuger pokazuje że dopiero po wyjściu z metody wyskakuję ten błąd

1 użytkowników online, w tym zalogowanych: 0, gości: 1