Hi,
I've encountered the following problem with console applicaiton calling web service. If I call the Web Service asynchronously it works ok as many times as I want. But if I add just the following line Form f = new Form(); - i.e. create a class that is a Form or inherits Form, then the async calls do not work any more - the completion call back is never called. Any suggestions? I'm attaching here a very simple source that reproduces the problem. Note the Form f = new Form line. If I comment it out - then the second call to Web Service returns ok. If is not commented the second call not completed - i.e. the DataCallBack is never called.
using System;
using TestWebServiceConsoleApplication.com.eoddata.ws;
using System.Threading;
using System.Windows.Forms;
namespace TestWebServiceConsoleApplication
{
class Program
{
public com.eoddata.ws.Data service = null;
string token = null;
static void Main(string[] args)
{
//create class
Program p = new Program();
//create web service proxy
p.service = new com.eoddata.ws.Data();
//perform synchronous login
p.Login("user", "password");
//invoke async. method
p.GetSymbolHistory();
//just wait for 30 sec. - didn't want to make this more complex with events
Thread.Sleep(30000);
//THIS LINE IS THE TROUBLEMAKER!!! if you comment it out - the next call will be successful
Form f = new Form();
//invoke the async. method again.
p.GetSymbolHistory();
//wait for the call back. Without Form f = new Form() line the answer to call back arrives quite in time - about few second later.
Thread.Sleep(3000000);
}
//login
public string Login(string userName, string password)
{
string token = null;
LOGINRESPONSE response = service.Login(userName, password);
if (!string.IsNullOrEmpty(response.Token))
{
token = response.Token;
service.SymbolHistoryPeriodByDateRangeCompleted += new SymbolHistoryPeriodByDateRangeCompletedEventHandler(DataCallback);
System.Console.WriteLine("Login successful " + token);
}
this.token = token;
return token;
}
public void GetSymbolHistory()
{
service.SymbolHistoryPeriodByDateRangeAsync(this.token, "NYSE", "X", "20111117", "20111118", "1", null);
System.Console.WriteLine("Request sent");
}
private void DataCallback(object sender, SymbolHistoryPeriodByDateRangeCompletedEventArgs args)
{
try
{
if (args.Cancelled)
{
System.Console.WriteLine("Cancelled");
return;
}
if (args.Error != null)
{
System.Console.WriteLine(args.Error.ToString());
return;
}
RESPONSE response = args.Result;
if ((response.Message != "Success")
&& (response.Message != "No data available")
&& (response.Message != "Invalid Exchange Code")
)
{
System.Console.WriteLine("Error getting response");
}
else
{
System.Console.WriteLine("Got response!!!");
}
}
catch (Exception e)
{
System.Console.WriteLine(e.ToString());
}
}
}
}