java 异步调用webapi_如何从MVC4 WebAPI异步调用WCF方法

我是WebApi,.Net世界的新手,并且对于我应该采取什么方法的所有可用信息完全混淆 . 我使用MVC4 WebApi创建了一个WebService,Twilio在收到短信时会调用它 . 我需要回复此短信 . 我正在使用当前被同步调用的WCF方法 . 由于我的进程可能需要超过3-5秒才能处理对文本消息的回复,因此Twilio的连接会因超时而断开连接 . 所以我正在寻找异步调用此WCF方法的方法 . 我的问题是调用WCF方法(我使用对象工厂调用WCF并使用)我是否需要更新 Contract 以说Async?我对此感到困惑 .

BTW我的Web服务是在IIS7中使用.Net4.5框架和MVC4 WebApi .

我的代码有点像这样:所以我想异步调用SendSms部分 . 我怎么做?我可以简单地使用Task.Run Async和Await吗?

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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值