C# 从SMSC InteLab SMPP接收传递消息
这几周我试过了,但仍然不知道如何在从SMSC发送短信后获得传递信息。我使用了Intelab SMPP并开发了一个sms系统。我使用了以下代码来获取交货收据,并且我使用MessageId成功获取了收据C# 从SMSC InteLab SMPP接收传递消息,c#,.net,sms,smpp,C#,.net,Sms,Smpp,这几周我试过了,但仍然不知道如何在从SMSC发送短信后获得传递信息。我使用了Intelab SMPP并开发了一个sms系统。我使用了以下代码来获取交货收据,并且我使用MessageId成功获取了收据 public static IList<SubmitSmResp> ConnectToInet(string sourceAddress, string DestinationAddress, string Message) { try {
public static IList<SubmitSmResp> ConnectToInet(string sourceAddress, string DestinationAddress, string Message)
{
try
{
SmppClient client = new SmppClient();
IList<SubmitSmResp> respList = null;
client.Connect(#SMSSeverIP, #PORT);
if (client.Status == Inetlab.SMPP.Common.ConnectionStatus.Open)
{
client.Bind("USERNAME", "Password", Inetlab.SMPP.Common.ConnectionMode.Transceiver);
if (client.Status == Inetlab.SMPP.Common.ConnectionStatus.Bound)
{
client.AddrTon = 5;
respList = client.Submit(
SMS.ForSubmit().From(sourceAddress).To(DestinationAddress).Text(Message).DeliveryReceipt().Coding(DataCodings.Default)
);
//client.Submit(SMS.ForSubmit().Text(Message).From(sourceAddress).To(DestinationAddress).DeliveryReceipt().Coding(DataCodings.Default));
client.evDeliverSm += new Inetlab.SMPP.Common.DeliverSmEventHandler(OnDeliverSm);
client.UnBind();
}
client.Disconnect();
}
return respList;
}
catch (Exception ex)
{
throw ex;
}
}
我已经存储了从每个SMSC响应收到的MessageId,我需要使用它来获取每个消息的相应传递报告,其中包含传递状态、传递日期和提交日期。有人能帮我弄清楚吗。谢谢你的帮助 正如我所看到的,您在设置SMPP传递处理程序后立即解除绑定,这可能是您不这么做的原因;I don’我没有收到DR.试着等一段时间再解开。我对你的想法有所改进,但仍然没有得到结果。我只收到SMSC发出的messageId值,状态为NONE。没有提交日期和完成日期。我需要使用存储的messageId在发送短消息一段时间后获取传递消息。我正在使用windows服务访问它,无法在windows服务内实现evDeliverSm事件。你知道吗?顺便说一下,感谢您的回复。请检查DR消息(短消息或有效负载消息),通常SMSC会将状态和时间放在该字段中,否则SMSC可能无法正确配置应用程序DR交付。在此之前,请启动Wireshark,查看您的DR PDU是否具有所需的所有字段。我的SMSC已正确配置,但我仍能找出问题所在。虽然我还没有解除客户机的绑定,但OnDeliverSm方法没有启动。我的代码有错误吗?当我调试代码OnDeliverSm方法时,从未调用过。什么是提交状态(resp),它成功了吗?交付注册事件的响应是什么?你检查过wireshark看到DeliverSM包了吗?您使用哪种SMSC?
private static void OnDeliverSm(object sender, DeliverSm data)
{
string messageText = data.Client.GetMessageText(data.UserDataPdu.ShortMessage, data.DataCoding);
}