【问题标题】:Twilio's TwilioRestClient SendSmsMessage returns nullTwilio 的 TwilioRestClient SendSmsMessage 返回 null
【发布时间】:2013-01-14 21:05:16
【问题描述】:

我的一切都在本地运行,但是当我在运行 Mono 2.10.9 的 Amazon EC2 Debian 6.0.6 服务器上测试 Twilio 的服务时,我发现发送 SMS 消息不再有效。我相信问题出在服务器配置的某个地方,因为我使用的是最新的 Twilio (3.5.6)、RestSharp (104.1) 和 JSON.NET (4.5.11) 库,并且我可以保证以下使用的变量方法调用在运行时不为空。

var client = new Twilio.TwilioRestClient("{my account number}", "{my account token}");
var smsMessage = client.SendSmsMessage("{my account phone number}", "{my mobile phone number}", "Hello World!");

使用 ntop,我看到有字节被发送/接收到/形成这个请求,但 smsMessage 结果仍然为空。 SendSMSMessage 函数利用 RestSharp 库,特别是 RestClient 的 Execute 函数,它调用 Deserialize 方法并返回一个 IRestResponse,在这种情况下 Data 字段为空。

我在网上看到了一些迹象,表明问题可能出在反序列化过程中,但是,由于我已确保我使用的是最新版本的 JSON.NET,因此我不确定在此采取哪些其他步骤。

您对解决问题有什么建议吗?您是否怀疑这是代码或服务器问题?另外你有什么建议,使用 Debian,我如何进一步调试这种交互,甚至从应用程序外部获取完整的字节响应?

【问题讨论】:

  • 嗯。它实际上是否正确发送消息?当您在 Debian 实例上尝试时,该请求是否可能导致 400 错误请求?
  • 实际上较新版本的 RestSharp 不再依赖 JSON.NET,而是使用自己的内部 JSON 反序列化器。 Twilio 帮助程序库确实维护了对 JSON.NET 的依赖,但唯一使用它的情况是请求返回大于 400 的状态代码。所以我建议通过确定 Twilio 返回的状态代码来开始调试.如果大于 400,则可能是 JSON.NET 在反序列化数据时遇到问题。否则,RestSharps 反序列化器更有可能出现问题。
  • ...我还假设由于您在 Debian 上运行,所以您使用的是 Mono?如果是这样,我相信 RestSharp 和 Twilio 都有特定于单声道的解决方案文件。您可能会考虑提取这两个库的源代码并使用 Mono 特定项目构建新库。
  • 是的,你是对的,我使用的是 Mono。在为 Twilio 使用预编译库时,我看不到响应对象,因为它为空。但我会听从 Devin 的建议,自己构建这些库。那应该允许我远程调试该过程。感谢您的建议。

标签: c# mono amazon-ec2 twilio restsharp


【解决方案1】:

在调试 RestSharp 库时,我发现异常与 SSL 和 Mono 的受信任证书有关。我收到的异常信息如下:

Error getting response stream (Write: The authentication or decryption has failed.): SendFailure

按照下面链接中的说明帮助我解决了问题,尤其是通过 执行以下并重新启动单声道。

certmgr -ssl https://api.twilio.com

http://www.mono-project.com/FAQ:_Security

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多