Ephismen

Ephismen

  • NA
  • 9
  • 11.5k

WebServices and EventHandler in C#.

Aug 30 2010 6:10 AM

Hello,


Sorry if I make some grammar mistakes because i'm not a native english speaker but i'll try to be as clear and correct as possible.

I was unsure of where to post this because it was concerning 3 different support: Silverlight, WebClients and C#, but finnaly decided it was more suitable to the last category.

Ok here is my problem:

I'm developping a Silverlight application that needs to consume multiple times a WebService. When I will first consume this Webservice it will return me with a UserID that I need to conserve in order to call other WebServices. For example:

The user enters his "login" and "password", clicks the "Connect" button and the WebService returns the program an array with a value(0 or 1), and a user ID(guid) as a session identifyer. After that, the program needs to retrieve the users settings and infos, in order to do that he will consume another WebService entering as parameter the user ID(guid), and returning the users mails, age, etc... The problem is I would like to be able to retrieve this user ID once and for all out of my first WebClient call and be able to use it whenever I want. But the problem is that when I create a WebClient it generates an EventHandler and I do not know how to extract anything from that except with the UserInterface Thread of Silverlight witch isn't very usefull for my purposes. I tried to use lambda expression but it wasn't really what i needed even though it cleaned my code a litle.

Here is what i'm doing with what I would like to do.


 namespace ButtonTry
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}

//When the users clicks on the Connect Button
private void btnID_Click(object sender, RoutedEventArgs e)
{
WS.MainSoapClient proxy = new AfinosWS.MainSoapClient();

WS.ArrayOfString request_tab = new WS.ArrayOfString();
WS.ArrayOfString response_tab = new WS.ArrayOfString();

//Adding the login and password into the array that i will send to the WebService
request_tab.Add(IDcase.Text);
request_tab.Add(PWcase.Text);

proxy.USER_FunctionsCompleted += (s, ea) =>
{
response_tab = (AfinosWS.ArrayOfString)ea.Result;

//Showing the returned data to the screen for debugging purposes
ReturnValue.Text = response_tab[0];
Guid.Text = response_tab[1];
};
proxy.USER_FunctionsAsync("USER_LOGIN", request_tab);

//I would like to get the guid(response_tab[1]) here in order to send it to another Webservice or functions.
}
}
}

The only time I was able to save that value out of my EventHandler was to create a global var, but even then it worked only when i pressed the connect button for a second time.

If you have any question or didn't understand what I said or what I wanted please feel free to ask me.

Thank you, Ephismen.

[EDIT]Just a litle edit to specify simply what i'm trying to do:

1 - Send user login and Password (returns Array with a value in first string and a user id in second), and launch application.
1a - Save the "user id" into a string.
2 - Start a Loop that will consume Webservice every 2 seconds:
    2a - Send "user id" and retrieve the users Information(age, name, e-mails);
    2b - Send "user id" and retrieve users friends(array of strings with friend name, message and avatar)

I could do this a very dirty way by calling my first WebService over and over to retrieve each time the "user id" but i would like to have it for the whole program.