CSharp Receiving SMS
From SMS Wiki
Revision as of 01:12, 9 March 2007 by 207.81.129.251 (Talk)
This example is a .NET Generic Handler. It demonstrates the reception of an inbound (HTTP Forwarded) SMS.
Echo.ashx
<%@ WebHandler Language="C#" Class="Echo" %> using System; using System.Web; using System.Web.Services.Protocols; using com.upsidewireless.api.sms; public class IncomingMessage { public string username; public string sender; public string contents; public SmsEncoding encoding; public string carrierCode; public string recipient; } public class OutgoingMessage { public string dedicatedNumber; public string recipient; public string carrierCode; public string contents; public SmsEncoding encoding; public override string ToString() { return "[" + recipient + "]"; } } public class Echo : IHttpHandler { System.Diagnostics.EventLog evenLogger = new System.Diagnostics.EventLog("SMS Echo"); public Echo() { evenLogger.Source = "SMS Echo Test"; } public void ProcessRequest(HttpContext context) { // This sample will respond to incoming HTTP POSTs and send back to the sender the same text that was sent string requestType = context.Request.RequestType; switch (requestType) { case "POST": IncomingMessage incomingMessage = buildIncomingMessage(context); OutgoingMessage outgoingMessage = processIncomingMessage(incomingMessage); sendMessage(outgoingMessage); context.Response.Write("Successfully sent echo back to: " + outgoingMessage); break; default: context.Response.Write("This handler only accepts HTTP operations of type POST"); break; } } private OutgoingMessage processIncomingMessage(IncomingMessage incomingMessage) { // TODO Build an OutgoingMessage object based on data contained within the incomingMessage. OutgoingMessage result = new OutgoingMessage(); string message = "Time:" + DateTime.Now + "\n"; message += "Username:" + incomingMessage.username + "\n"; message += "From:" + incomingMessage.sender + "\n"; message += "To:" + incomingMessage.recipient + "\n"; message += "Encoding:" + incomingMessage.encoding.ToString() + "\n"; message += "Carrier Code:" + incomingMessage.carrierCode + "\n"; message += "Message:" + incomingMessage.contents; result.recipient = incomingMessage.sender; result.contents = message; result.encoding = incomingMessage.encoding; result.carrierCode = incomingMessage.carrierCode; result.dedicatedNumber = incomingMessage.recipient; return result; } private IncomingMessage buildIncomingMessage(HttpContext context) { IncomingMessage result = new IncomingMessage(); result.username = context.Request.Form["name"]; result.sender = context.Request.Form["sender"]; result.contents = context.Request.Form["data"]; string encodingString = context.Request.Form["encoding"]; result.carrierCode = context.Request.Form["carriercode"]; result.recipient = context.Request.Form["inboundnumber"]; SmsEncoding smsEncoding = SmsEncoding.Seven; // we need to convert the encoding over to a strongly typed variable switch (encodingString) { case "Sixteen": smsEncoding = SmsEncoding.Sixteen; break; } result.encoding = smsEncoding; evenLogger.WriteEntry("Incoming Message Received", System.Diagnostics.EventLogEntryType.Information, 500, 0); return result; } private void sendMessage(OutgoingMessage outgoingMessage) { // TODO: be sure to change the data stored within the resource before using this function! string token = Resources.UpsideWirelessCredentialsResource.token; string signature = Resources.UpsideWirelessCredentialsResource.signature; SMS sms = new SMS(); try { SMSSendResult result = null; if (String.IsNullOrEmpty(outgoingMessage.carrierCode) || String.IsNullOrEmpty(outgoingMessage.dedicatedNumber)) { // standard routing result = sms.Send_Plain(token, signature, outgoingMessage.recipient, outgoingMessage.contents, outgoingMessage.encoding); } else { // dedicated routing result = sms.Send_Plain_Dedicated(token, signature, outgoingMessage.recipient, outgoingMessage.contents, outgoingMessage.encoding, outgoingMessage.carrierCode, outgoingMessage.dedicatedNumber, 0.0); } if (result.isOk) { evenLogger.WriteEntry("Sent SMS: " + outgoingMessage, System.Diagnostics.EventLogEntryType.Information, 0, 0); } else { evenLogger.WriteEntry("Unable to send SMS: " + outgoingMessage, System.Diagnostics.EventLogEntryType.Error, 1000, 0); } } catch (SoapException e) { evenLogger.WriteEntry("Fatal: Unable to send SMS: " + outgoingMessage + " Exception: " + e.Detail.InnerText, System.Diagnostics.EventLogEntryType.Error, 5000, 0); } } public bool IsReusable { get { return false; } } }