2

Jamaa Lib と Jamaa Net を使用したアプリケーションの実装に成功しました。開発者に感謝します。

しかし、非同期送信操作を使用すると問題に直面しています。未処理の例外が継続的に発生しています。誰かが問題を解決するのを手伝ってくれれば、非常にありがたいです。

注意してください。同じアプリケーションを使用して SMS を送受信しています。1 日あたり平均 100,000 通の SMS を送信する必要があります。同時に SMSC からも SMS を受信して​​います。前もって感謝します。

私のコードスニペット

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 timeOut) で System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage (IntPtr md、オブジェクト [] 引数、オブジェクト サーバー、オブジェクト [] & outArgs) でSystem.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink)

[0] で再スローされた例外: JamaaTech.Smpp の System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(Object NotUsed, MessageData& msgData) で System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper(Message reqMsg, Boolean bProxyCase) で。 JamaaTech.Smpp.Net.Client.SmppClient.EndSendMessage(IAsyncResult 結果) の Net.Client.SendMessageCallBack.EndInvoke(IAsyncResult 結果) Transciever.Program.SendMessageCompleteCallback(IAsyncResult 結果) の d:\smpp\transciever\appTranscieverinCSharp\appTranscieverinCSharp\Program .cs: System.Runtime.Remoting.Messaging.AsyncResult.SyncProcessMessage(IMessage msg) の行 223 .System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(オブジェクトの状態) での ThreadPoolCallBack(Object o) System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() の System.Threading.ThreadPoolWorkQueue.Dispatch() の System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() の ContextCallback コールバック、オブジェクトの状態、ブール値の preserveSyncCtx)System.Threading.ThreadPoolWorkQueue での System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() での System.Threading.ExecutionContext.Run(ExecutionContext executionContext、ContextCallback コールバック、オブジェクト状態、ブール値 preserveSyncCtx) でのオブジェクト状態、ブール値 preserveSyncCtx)。 System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() で Dispatch()System.Threading.ThreadPoolWorkQueue での System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() での System.Threading.ExecutionContext.Run(ExecutionContext executionContext、ContextCallback コールバック、オブジェクト状態、ブール値 preserveSyncCtx) でのオブジェクト状態、ブール値 preserveSyncCtx)。 System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() で Dispatch()

4

2 に答える 2

1

raw パケットを表示するために、wireshark を使用することができます。これにより、何が問題なのかがわかります。私の場合、それは無効なシステム ID でした。

于 2015-09-25T20:54:39.833 に答える