有人可以解释ID在某些XMPP XML请求中的作用(谈论核心XMPP)吗?
例如,我可以通过发送以下请求来获取名单:
public Array GetTotalResearchByArea()
{
var list = new List<int>();
var all_area = context.Areas.Select(x => x.Id ).ToList();
foreach( var item in all_area)
{
var allReserachCategory = context.ResearchCategories.Where(a => a.AreaId == item).Select(a => a.Id).ToList();
var totalResearchBySingleArea = context.Researchs.Where(c => allReserachCategory.Contains(c.ResearchCategoryId)).Count();
list.Add(totalResearchBySingleArea);
}
return list.ToArray();
}
但是我也可以通过添加一个随机ID来获取它:
<iq type="get">
<query xmlns="jabber:iq:roster"></query>
</iq>
我是否应该使用ID是否有理由?与安全相关吗?有什么缺点吗?关于ID的约定是什么,应该如何构造它们?
答案 0 :(得分:2)
当您发送带有 type =“ get” 或 type =“ set” 的IQ时,您将收到带有 type =“ result” < / strong>和相同的ID
所以这只是为了按照ID将响应与他们的请求进行匹配。
例如
获得花名册:
ajaxError()
响应:
def text = "Going to convert this to Base64 encoding!"
def encoded = text.bytes.encodeBase64().toString()
println encoded
byte[] decoded = encoded.decodeBase64()
println new String(decoded)
它们包含相同的ID,因此您知道此响应是针对哪个请求
答案 1 :(得分:2)
我建议您简单地研究一下协议规范。 RFC 6120 § 8.1.3. id很好地解释了恕我直言:
始发实体使用'id'属性来跟踪任何
与
有关的响应或错误节 从另一个实体(例如中间服务器)生成的节
或预期的收件人。'id'的值取决于原始实体
属性仅在其当前流中是唯一的或唯一的
对于
和 节,推荐用于
原始实体包括“ id”属性;对于节,
这是必需的。如果生成的节包含'id'属性,则为
响应或错误节还必须包含一个“ id”
属性,其中'id'属性的值必须与
生成的节。
并非您的示例显示的IQ节没有设置“ id”属性实际上是无效。