【问题标题】:Domain Label contains illegal character ':'域标签包含非法字符“:”
【发布时间】:2018-03-04 20:20:32
【问题描述】:

我正在为FCM 使用Sharp.XMPP 库。我可以正常连接,它可以毫无问题地接收上游消息。但是,将ack 发送回服务器会得到错误代码 400 的响应,其中包含以下详细信息

<JIDMalformed xmlns="urn:ietf:params:xml:ns:xmpp-stanzas" />
<text>"Malformed JID 'XXXXXX:XXXXXXXXXXXXX-XXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXX_XXXXX_XXXXX-XXXXXXXXXXXXXXXXXXX': domain label contains illegal character ':'"</text>

而 Xs 替换了接收上游消息的设备注册令牌。 我用来形成消息并发送的代码:

Sharp.Xmpp.Im.Message x = new Sharp.Xmpp.Im.Message(vFrom);
x.Data.SetAttribute("message_id", vMessageID);
x.Data.SetAttribute("message_type", "ack");
cl.SendMessage(x);

字符串 vFrom 包含 device_token。我无法替换:,因为它是设备令牌的重要组成部分,\: 也不会逃避它。在XML 格式中使用冒号的正确方法是什么?

【问题讨论】:

  • 冒号不是 xml 中的特殊字符。见维基:en.wikipedia.org/wiki/…
  • 我知道不是,但错误就在那里。我该如何解决?
  • 我认为是单引号 (apos) U+0027。见维基
  • 冒号是 U+003A。试试:“urnU+003AietfU+003AparamsU+003AxmlU+003AnsU+003Axmpp-stanzas”
  • deviceID 的值来自字符串变量vFrom,我用console.write 和Visual Studio 的Text Visualizer 进行了检查;出现的单引号在服务器响应消息的错误描述中,而不是在所述变量中。

标签: c# xml sharp.xmpp


【解决方案1】:

这里的问题是您已将属性添加到 &lt;data&gt; 标记,因此它们应该是 &lt;gcm&gt; 的元素

var msg = Xml.Element("message");
var elem = Xml.Element("gcm" ,"google:mobile:data"); //the gcm tag with xmlns attribute
Xml.Child(msg, elem); //assign child to message tag
var data = new {to = vFrom; message_id = vMessageID, message_type = "ack"};
JavaScriptSerializer serializer = new JavaScriptSerializer();
elem.Text(serializer.Serialize(data)); //not adding attributes
cl.SendMessage(new Sharp.Xmpp.Im.Message(new Sharp.Xmpp.Core.Message(data: elem)));

here 是用于 FCM 的 Sharp.XMPP 的改进版本。它包括类Sharp.Xmpp.Core.Message 可能未提交给 github。 This 可能有助于澄清。

【讨论】:

    猜你喜欢
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 2020-09-19
    • 2021-12-15
    相关资源
    最近更新 更多