Sunday, November 02, 2008

Looking for a .NET SMPP implementation

i work for a company that's registered as a WASP (or VASP, not really sure which is the official one now) with Glo, MTN and Zain, and we have a messaging gateway connected to these operators. we have clients we resell SMS credits to, and till rather recently we used the web service on our gateway to link our clients to the gateway.

however, due to certain things, my employer recently added the ability to use SMPP binds to our gateway. i cannot be certain until i check using a tool like Wireshark (geek call-out: any other tools that might make the job easier will be appreciated!), but i think that SMPP will consume less bandwidth than using the web service.

anyway, my boss got me and the other developer on our toes with different APIs that allow us build applications that use the gateway. since we already have working knowledge of how to build applications that use the web service, we were stuck with a COM and a Java component which use a custom protocol to talk to the gateway over TCP/IP, the SDK supplied my the gateway vendor, and different components for using SMPP (if you read my Facebook status message about fiddling with Java, i was trying to learn about a certain Java SMPP API).

since i program mostly in C#, i started looking for some component(s) to allow me use SMPP from my applications. i turned up quite a few:

  • A library written in C++ with a COM component that uses it: here
  • Easy SMPP
  • RoaminSMPP
  • The Devshock .NET SMPP component (For some time the site has been under reconstruction and so the files are no longer available from their site.)
  • InetLabs's ALT.SMS.SMPPClient class library
  • /n software's IP*Works: here

since what i was doing was trying out stuff, buying a component was out of the question. i'm also kinda biased toward open source, so that kinda kicked out IP*Works (don't get me wrong: IP*Works is probably very good - but i just didn't want it. i might try it out some other time). i got the others and started trying each one out, using a local SMPPSim server (SMPPSim is a Java program that emulates an SMPP server. great for trying out SMS appliactions)

Easy SMPP came with a demo application (there's also an SMPP server on SourceForge that uses it), but i couldn't connect to my local SMPPSim server using it (oddly enough, i could connect to the Easy SMPP gateway with it), so that was a no-go. i'll try it again some other time.

The Devshock component came with zero documentation (bad), no sources (i can live with that), and demo applications (client and server) written in Visual Basic.NET (i dislike VB, something that carried over to VB.NET. also, translating a program from VB.NET to C# without an automated tool is not particularly easy, even if you can do it). somehow, i got a demo application working with it Friday, even tested it on our live gateway.

i should have been satisfied, but the Devshock component has gone two years with no updates (which really shouldn't be a problem - the SMS specification is frozen and the SMS Forum shut down). so this weekend, i tried getting the RoaminSMPP component to work (incidentally, it was updated in October, but the author won't be working on it anymore) at home, and i sort of prefer the way it's structured than the Devshock component (it uses event handlers quite a bit instead of return codes and error messages). it does have its bad sides though. it comes with zero documentation and examples. i had to load up my trusty copy of .NET Reflector (one of the greatest .NET tools ever!) and the sources to find out how to use it (also did that with the Devshock binary, but the InetLab one was obfuscated - only one namespace of five was not).

i'm yet to test the InetLab binary - and yes i know: i probably am being an idiot, since i already have one that works (two, to be precise. why knock it?). still, if i'm giving the component to someone else to use, i may need to recommend the one that's simplest to use. anyway, you already got here. go read something else for now. i've nothing more to say here (far too many acronyms, if you ask me) :D. have fun!


BasheerG said...

Hi Mate,

Any news or updates on your final recommendation, since I have the same situation as yours.

On the other hand, did you take into consideration performance and high traffic as a major factor during your evaluation? Since for our case, it is a necessity.

Thanks in advance and I wish you all the luck,

// Basheer Al Ghazawi

Sandip Shirawala said...

i need help for smpp connectivity with smpp account for .net application

Easyman said...

Few time ago i have implemented smpp client (that connects to gsm operators) using devshock
It is really good library

Alex Fernandez said...

where can i download the smpp server?
is it a device?
how can i configure it.

untouched said...

@Alex okay, first of all, it's a software component (if you're not already a programmer, think: fancy Lego brick) that allows you build SMPP-enabled applications on the .NET platform.

Javier said...

Hi, your review is very usefull, i have to develop a smmp client myself.
Did you develop any test client using any of the component that you are reviewing?

Roman said...

i recommend to use devshock library
download link:

Tehseen said...

How can we send multi sms at a time using smpp,

Tehseen said...

how can we send multi sms via smpp , in C#.NET,

source code required; anyone, please

Roman said...

Tehseen : use async methods to send multiple sms at time.

Usually operators limit sms speed: how many sms you can send in minute, period between each sms, recovery period (time to wait before resending sms after smpp server failure)

Bartosz Antosik said...
This comment has been removed by the author.
Anonymous said...

thanks dear,
i had implemented my own SDK with, for 32,64 systems
it is working for SMPP 3.4 now
too much fast [20k SMS/sec]
same for receiving
supporting multithreadin, multiconnections, queues, and pure logging for everything.

Bartosz Antosik said...

Correction to posted earlier information about a nice SMPP component for .NET world (but also ActiveX/COM/OCX) you may want to consider - the correct URL is:

SMSC client .NET

Hope this may be useful to someone.

Benjamin Franklin said...

Untouched, Have you ever had any success with DevShock using TLV for Concat SMS? I have had a working client for some time but now the folks I developed it for want Concat SMS and since DevShock went offline I have been trying to find a TLV example but not much luck.

untouched said...

@Benjamin Franklin I didn't test TLVs, I'm sorry to say.

@BasheerG I had to set up an SMPP gateway for a client in the last three months and ended up recommending the Inetlab component (the old, free one and the new, commercial one) for .NET and jSMPP/SMSLib for Java. SMSLib has .NET binaries created using IKVM.

muleso said...

Hesham,,,,please get in touch with me