我是WebApi,.Net世界的新手,對於我應該採取什麼方法提供的所有信息完全混淆。我使用MVC4 WebApi創建了一個WebService,Twilio在收到文本消息時調用它。我需要回復這條短信。我正在使用當前正在同步調用的WCF方法。由於我的進程可能需要超過3-5秒才能處理對文本消息的回覆,因此由於超時而與Twilio的連接斷開。所以我正在尋找方法來異步調用這個WCF方法。 我的問題是調用WCF方法(我使用Object Factory調用WCF並使用) 我需要更新合同以表示異步?我對此很困惑。如何從MVC4異步調用WCF方法WebAPI
順便說一句我的Web服務是在IIS7中,並使用.Net4.5框架和MVC4 WebApi。
我的代碼有點像這樣:所以我想異步調用SendSms部分。我怎麼做?我可以簡單地使用Task.Run異步和等待?
using Twilio.Mvc;
using Twilio.TwiML.Mvc;
using Twilio.TwiML;
public class SmsController : ApiController
{
[HttpPost]
public HttpResponseMessage Post([FromBody]SmsRequest smsReq)
{
var response = new Twilio.TwiML.TwilioResponse();
//validation checks..
try
{
-- call to WCF to get the List of sms to be sent
if ((txtMessageResponse != null) && (txtMessageResponse.SmsMessageInfo.Count > 0))
{
_smsStagingList = txtMessageResponse.SmsMessageInfo;
foreach (TextMessageStaging prepareTextMessageResponse in _smsStagingList)
{
smsDTO textMessageItems = new smsDTO();
textMessageItems.PhoneNumber = prepareTextMessageResponse.PhoneNumber;
textMessageItems.SmsMessage = prepareTextMessageResponse.SmsMessageBody;
isTxtMessageSent = SendSms(textMessageItems);
//If the messages were sent then no need to set the flag to be updated
if (isTxtMessageSent)
{
txtMessageStatusToBeUpdated = false;
}
}
return Request.CreateResponse(HttpStatusCode.OK, twilioResponse.Element);
}
else
{
//send error response
}
catch (Exception msgProcessingError)
{
//send error response again as processing error
}
finally
{
//set the outbound flag in the table
}
}
private bool SendSms(smsDTO textMessageItems)
{
bool isTxtMessageSent = false;
PushMessageRequest txtMessageRequest = new PushMessageRequest();
PushMessageResponse txtMessageResponse = null;
txtMessageRequest.SmsMessageInfo = new SendTextMessage(); //instantiate the dto
txtMessageRequest.SmsMessageInfo.ToPhone = textMessageItems.PhoneNumber;
txtMessageRequest.SmsMessageInfo.TextMessage = textMessageItems.SmsMessage;
try
{
using (ITextService textService = ObjectFactory.SendSmsMessage())
{
txtMessageResponse = textService.SendSmsMessage(txtMessageRequest);
}
isTxtMessageSent = txtMessageResponse.IsSuccessful;
}
catch (Exception ex)
{
isTxtMessageSent = false;
}
return isTxtMessageSent;
}
幾個澄清問題。您是否使用ASP.NET Web API或WCF創建您的服務?另外,你有沒有一種特定的方法可以在你的服務中調用,你知道它可能會長時間運行? –
@DevinRader - 我正在使用ASP.NET Web API創建服務。但在我的HTTP後,我已經實現了一個駐留在WCF中的方法。 – Ditty