By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
424,678 Members | 2,021 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 424,678 IT Pros & Developers. It's quick & easy.

how do u call async webmethod from javascript!??!!

P: n/a
Hello to all!

I have a fairly simple webservice running in asp.net ajax under c# (vs
2008).
I built the service and it runs just dandy when i test it by itself in
visual studio.
However, to make it work, i had to break up the webmethod into the
BeginXXX, EndXXX model
as per http://msdn2.microsoft.com/en-us/library/aa480516.aspx
But now, i can no longer call this method from javascript (since to
use the BeginXXX, EndXXX, you must remove the [WebMethod] from the
orig method)
Specifically, in javascript i originally would be able to call the
service via
"WebService_speech.GenerateSpeechDataForText"
But after adding in the BeginXXX, and EndXXX, i no longer know how to
call the service from javascript
I feel like i'm so close, but i just dont know how to call my service.
Any ideas?

here's the code snippet from the service

WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class WebService_speech : System.Web.Services.WebService
{
public System.Speech.Synthesis.SpeechSynthesizer TtsVoice;

public WebService_speech()
{
//Uncomment the following line if using designed components
//InitializeComponent();
}

public delegate string GenerateSpeechDataForTextAsyncStub(string
text);

//meat of the method (heavy lifting done here)
//where the actual speech data is extracted from the text
public SpeechData GenerateSpeechDataForText(string text)
{
//do speech stuff here
//i removed the processing code
return SpeechData_;
}

//state monitor for the GenerateSpeechDataForText service
public class MyState
{
public object previousState;
public GenerateSpeechDataForTextAsyncStub asyncStub;
}

//start the GenerateSpeechDataForText method
[WebMethod]
public IAsyncResult BeginGenerateSpeechDataForText(string text,
AsyncCallback cb, object s)
{
GenerateSpeechDataForTextAsyncStub stub = new
GenerateSpeechDataForTextAsyncStub(GenerateSpeechD ataForText);
MyState ms = new MyState();
ms.previousState = s;
ms.asyncStub = stub;
return stub.BeginInvoke(text, cb, ms);
}

//end the GenerateSpeechDataForText method
[WebMethod]
public SpeechData EndGenerateSpeechDataForText(IAsyncResult call)
{
MyState ms = (MyState)call.AsyncState;
return ms.asyncStub.EndInvoke(call);
}
}


Thx a million,
matt
Dec 12 '07 #1
Share this Question
Share on Google+
2 Replies


P: n/a
the async webmethod is only used from .net programs. with .net you use a
proxy stub that is generated to call the webservice. the aync methods
are part of the stub (that runs in the caller), and allow specification
of a completion delegate.

javascript calls the webservice directly (socket to port) and is always
async (the a in ajax). when javascript calls a webservice, you always
supply a completion delegate.

so to do async from javascript you call the standard webservice method.

-- bruce (sqlwork.com)

jo****@gmail.com wrote:
Hello to all!

I have a fairly simple webservice running in asp.net ajax under c# (vs
2008).
I built the service and it runs just dandy when i test it by itself in
visual studio.
However, to make it work, i had to break up the webmethod into the
BeginXXX, EndXXX model
as per http://msdn2.microsoft.com/en-us/library/aa480516.aspx
But now, i can no longer call this method from javascript (since to
use the BeginXXX, EndXXX, you must remove the [WebMethod] from the
orig method)
Specifically, in javascript i originally would be able to call the
service via
"WebService_speech.GenerateSpeechDataForText"
But after adding in the BeginXXX, and EndXXX, i no longer know how to
call the service from javascript
I feel like i'm so close, but i just dont know how to call my service.
Any ideas?

here's the code snippet from the service

WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class WebService_speech : System.Web.Services.WebService
{
public System.Speech.Synthesis.SpeechSynthesizer TtsVoice;

public WebService_speech()
{
//Uncomment the following line if using designed components
//InitializeComponent();
}

public delegate string GenerateSpeechDataForTextAsyncStub(string
text);

//meat of the method (heavy lifting done here)
//where the actual speech data is extracted from the text
public SpeechData GenerateSpeechDataForText(string text)
{
//do speech stuff here
//i removed the processing code
return SpeechData_;
}

//state monitor for the GenerateSpeechDataForText service
public class MyState
{
public object previousState;
public GenerateSpeechDataForTextAsyncStub asyncStub;
}

//start the GenerateSpeechDataForText method
[WebMethod]
public IAsyncResult BeginGenerateSpeechDataForText(string text,
AsyncCallback cb, object s)
{
GenerateSpeechDataForTextAsyncStub stub = new
GenerateSpeechDataForTextAsyncStub(GenerateSpeechD ataForText);
MyState ms = new MyState();
ms.previousState = s;
ms.asyncStub = stub;
return stub.BeginInvoke(text, cb, ms);
}

//end the GenerateSpeechDataForText method
[WebMethod]
public SpeechData EndGenerateSpeechDataForText(IAsyncResult call)
{
MyState ms = (MyState)call.AsyncState;
return ms.asyncStub.EndInvoke(call);
}
}


Thx a million,
matt
Dec 12 '07 #2

P: n/a
hi bruce,
thank you for responding.

I apologize for not being clear enough on my original post.
When i dont use the BeginXXX and EndXXX methodology, i can call the
webservice from javascript no problem (i.e. the method "
GenerateSpeechDataForText").
But when i use the BeginXXX and EndXXX methodology, javascript no
longer knows of that method name.
Isnt that bizarre?
Any thought,
Thanks,
matt
Dec 12 '07 #3

This discussion thread is closed

Replies have been disabled for this discussion.