1

我目前遇到了一个非常重要的问题,我希望有人能够解释一下,关于配置基于 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 看起来非常健壮且易于使用,因此下一步应该很容易就位

任何帮助将不胜感激

非常感谢巴里

4

2 回答 2

0

现在解决了

解决了通过 sql 调用手动检索令牌并让 Web 服务现在运行的问题

于 2013-07-29T08:45:11.717 回答
0

如果您查看表 mdl_external_services 有一个名为短名称的字段,该字段可能为空,因为您似乎无法通过 moodle UI 填充它。正是这个值需要用作服务参数而不是服务名称。

于 2013-08-21T09:34:26.543 回答