我目前遇到了一个非常重要的问题,我希望有人能够解释一下,关于配置基于 XML-RPC 的 Web 服务以在我的基于游戏的学习虚拟世界和专用的 Moodle 站点之间进行对话
据我所知,通过遵循一些关于如何配置 Moodle Web 服务的稀疏信息,我完成了以下步骤:
- 启用的网络服务
- 启用 XML-RPC 协议
- 编辑了我的管理员角色以允许使用协议并创建用于登录的令牌
- 为已添加我的管理员的经过身份验证的用户创建服务
Moodle 文档向您发送了一个循环,但据我所知,我已经涵盖了检查清单
我现在正在尝试将其插入我的虚拟世界的后端,以根据用户可以访问的内容等来使用主题集、作业等填充我的动态地形引擎
我的问题来自用于为用户检索令牌的简单 HttpWebRequest 我使用以下方法返回包含令牌的字符串
public string GetToken(string uname,string pword)
{
byte[] buffer = Encoding.ASCII.GetBytes("username="+uname+"&password="+pword+"&service=reflex");
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(url + "login/token.php?username=" + uname + "&password=" + pword + "&service=myservice");
WebReq.Method = WebRequestMethods.Http.Post;
WebReq.ContentType = "application/x-www-form-urlencoded";
WebReq.ContentLength = buffer.Length;
using(Stream PostData = WebReq.GetRequestStream())
PostData.Write(buffer, 0, buffer.Length);
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
using(StreamReader reader = new StreamReader(WebResp.GetResponseStream()))
return token = reader.ReadToEnd();
}
当我调试它以验证生成令牌时,它会抛出一个错误,说 Web 服务已关闭,但据我所知,这里没有调用 Web 服务,它使用内置的原始 php 文件返回一个字符串并且没有更多的。我检查了 PostData.Write 及其抛出的 .Length NotSupportedException ,我不确定它是否对第二个 using 语句有影响
我希望如果有人可以帮助配置设置,因为 XML-RPC dll 看起来非常健壮且易于使用,因此下一步应该很容易就位
任何帮助将不胜感激
非常感谢巴里