【发布时间】: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