【问题标题】:About Jamaa SMPP Asynchronous operation关于 Jamaa SMPP 异步操作
【发布时间】:2013-08-23 14:56:52
【问题描述】:

我已经使用 Jamaa Lib 和 Jamaa Net 成功实现了一个应用程序。感谢开发者。

但是我在使用异步发送操作时遇到了问题。不断引发未处理的异常。如果有人可以帮助我解决问题,将不胜感激。

请注意。我正在使用同一个应用程序接收和发送 SMS。我平均每天需要发送 100,000 条短信。同时我也收到来自 SMSC 的短信。提前致谢。

我的代码 sn-p

namespace Transciever 
{
class Program
{

    static void Main(string[] args)
    {
        SmppClient client = new SmppClient();
        MySQLConnect con = new MySQLConnect();
        TextMessage msg = new TextMessage();
        Settings settings = new Settings();
        SmppConnectionProperties properties = client.Properties;
        string sysid = ConfigurationManager.AppSettings["SystemID"];
        string pswd = ConfigurationManager.AppSettings["Password"];
        string hst = ConfigurationManager.AppSettings["Host"];
        int port = Int32.Parse(ConfigurationManager.AppSettings["Port"]);
        properties.SystemID = sysid;
        properties.Password = pswd;
        properties.Port = port ; //IP port to use
        properties.Host = hst; //SMSC host name or IP Address
        properties.SystemType = "";
        properties.DefaultServiceType = "";
        //Resume a lost connection after 30 seconds
        client.AutoReconnectDelay = 3000;
        //SmppClient client1=GetSmppClient();
        //Send Enquire Link PDU every 15 seconds
        client.KeepAliveInterval = 15000;

        //Start smpp client
        try
        {
            client.Start();

        }
        catch (Exception ex)
        {


        }
        client.MessageReceived += new EventHandler<MessageEventArgs>(client_MessageReceived);
        while (true)
        {
            client.ConnectionStateChanged += (sender, e) =>
            {

                switch (e.CurrentState)
                {

                    case SmppConnectionState.Closed:
                        // Connection to the remove server is lost

                        try
                        {
                            client.Start();

                        }
                        catch (Exception ex)
                        {

                        }

                        break;

                    case SmppConnectionState.Connected:
                        //Console.Write("Connected");
                        break;

                    case SmppConnectionState.Connecting:
                        break;

                }

            };


            String successQuery = "";
            var list = new List<smsoutbox>();
            list = con.Select("select msgID, srcMN,dstMN, msg from table where msgStatus='QUE' order by msgID desc LIMIT 500");
            int listcount = list.Count;
            int i = 0;
            if (listcount > 0 && client.ConnectionState == SmppConnectionState.Connected)
            {
                foreach (var row in list)
                {
                    i = i + 1;
                    msg.DestinationAddress = row.dstMN;
                    msg.Text = row.msg;
                    msg.SourceAddress = row.srcMN;
                    msg.RegisterDeliveryNotification = false;
                    successQuery += row.msgID.ToString() + ",";
                    try
                    {
                        client.BeginSendMessage(msg, SendMessageCompleteCallback, client);                        

                    }
                    catch (Exception ex)
                    {


                    }
                    if (i == 250)
                    {
                        try
                        {
                            if (successQuery.Length > 0)
                            {
                                successQuery = successQuery.Substring(0, successQuery.Length - 1);
                                successQuery = "update smsoutbox_bl set msgStatus='SENT' where msgID in (" + successQuery + ")";
                                con.Update(successQuery);
                                successQuery = "";
                            }
                        }
                        catch (Exception ex)
                        {
                        }
                        i = 0;
                    }//if i==250 ends

                }//foreach ends
            }//if listcount>0 ends

            if (i > 0)
            {
                try
                {
                    if (successQuery.Length > 0)
                    {
                        successQuery = successQuery.Substring(0, successQuery.Length - 1);

                        successQuery = "update smsoutbox_bl set msgStatus='SENT' where msgID in (" + successQuery + ")";
                        //dbConnection.RunSql(successQuery);
                        con.Update(successQuery);
                        successQuery = "";
                    }
                }
                catch (Exception ex)
                {
                }
            }
        }//while loop ends
    }//main ends

    static public void client_MessageReceived(object sender, MessageEventArgs e)
    {
        //The event argument e contains more information about the received message
        TextMessage textMsg = e.ShortMessage as TextMessage; //This is the received text message
        try
        {
            MyWebRequest myRequest = new MyWebRequest("http://localhost/cde/cdeblrecv.php", "POST", "mn=" + textMsg.SourceAddress + "&msg=" + textMsg.Text + "&sc=3333");

        }
        catch(Exception ex)
        {
        }
    }

    static private void SendMessageCompleteCallback(IAsyncResult result)
    {
        SmppClient client = (SmppClient)result.AsyncState;
        client.EndSendMessage(result);
    }


}//class program ends here
}//namespace ends here 

以下是应用程序抛出的异常。

未处理的异常:JamaaTech.Smpp.Net.Lib.SmppException:异常 'JamaaTech.Smpp.Net.Lib.SmppException' 类型的被抛出。

服务器堆栈跟踪:

在 JamaaTech.Smpp.Net.Client.SmppClient.SendMessage(ShortMessage 消息,Int32 超时)在 System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, 对象服务器, Object[]& outArgs) 在 System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink 回复Sink)

在 [0] 处重新抛出异常:在 System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper(消息 reqMsg,布尔 bProxyCase)在 System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(对象未使用, 消息数据和消息数据)在 JamaaTech.Smpp.Net.Client.SendMessageCallBack.EndInvoke(IAsyncResult 结果)在 JamaaTech.Smpp.Net.Client.SmppClient.EndSendMessage(IAsyncResult 结果)在 Transciever.Program.SendMessageCompleteCallback(IAsyncResult 结果) 在 d:\smpp\transciever\appTranscieverinCSharp\appTranscieverinCSharp\Program.cs:line 223 在 System.Runtime.Remoting.Messaging.AsyncResult.SyncProcessMessage(IMessage 味精)在 System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage 味精,IMessageSink 回复Sink)在 System.Runtime.Remoting.Proxies.AgileAsyncWorkerItem.ThreadPoolCallBack(对象 o) 在 System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(对象 州)在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext、ContextCallback 回调、对象状态、布尔值 preserveSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext、ContextCallback 回调、对象状态、布尔值 preserveSyncCtx) 在 System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 在 System.Threading.ThreadPoolWorkQueue.Dispatch() 在 System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

【问题讨论】:

    标签: c# smpp


    【解决方案1】:

    您可以尝试使用 wireshark 查看原始数据包,这会让您知道出了什么问题。就我而言,这是一个无效的系统 ID。

    【讨论】:

      【解决方案2】:

      您可能需要检查您的凭据,还需要添加以下语句:

      client.Properties.InterfaceVersion = InterfaceVersion.v34;
      client.Properties.DefaultEncoding = DataCoding.SMSCDefault;
      client.Properties.SourceAddress = "XXXXX";
      client.Properties.AddressNpi = NumberingPlanIndicator.Unknown;
      client.Properties.AddressTon = TypeOfNumber.Unknown;
      client.Properties.SystemType = "XXXX";
      client.Properties.DefaultServiceType = ServiceType.DEFAULT;
      

      它将帮助您并且肯定会删除此异常。 如果您觉得这个答案有用,请标记它。

      【讨论】:

        猜你喜欢
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-14
        • 2021-06-30
        • 1970-01-01
        • 2023-03-31
        相关资源
        最近更新 更多