跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 开发与实施交流
  4. 让 OE 的 XML-RPC 支持 Silverlight 和 Flash

让 OE 的 XML-RPC 支持 Silverlight 和 Flash

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
5 帖子 2 发布者 5.5k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • O 离线
    O 离线
    oldrev
    写于 最后由 编辑
    #1

    昨晚 hack 搞定的,没时间细写了,大概说一下原理:
    Silverlight 和 Flash 作为服务器插件,为了安全起见,就是防止 DDos 之类,限制不能做跨域 HTTP 请求,如果要允许跨域调用要在被请求的 web 服务器的根目录下放置 crossdomain.xml 并提供设置,SL 和 Flash 会先下载这个文件然后才决定是否允许请求。
    OpenERP 的 xml-rpc 服务器用的是 Python 标准库的 SimpleXMLRPCServer,支持持 XML-RPC 调用的 POST 请求,并不是 web 服务器,不能用 GET 请求返回文件,但是 SimpleXMLRPCServer 提供了
    SimpleXMLRPCRequestHandler 可以让我们自定义请求的处理器,所以,让我们自己加上 GET 请求的支持,返回 crossdomain.xml 文件:

    1. 修改 netsvc.py,为 SimpleXMLRPCRequestHandler 类加上下面的方法:[code]
      class SimpleXMLRPCRequestHandler(GenericXMLRPCRequestHandler, SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
      rpc_paths = map(lambda s: '/xmlrpc/%s' % s, GROUPS.get('web-services', {}).keys())

      def do_GET(self):
      #only allow a request for the crossdomain file
      if self.path != '/crossdomain.xml':
      self.send_response(403)
      self.log_request(403)
      return

       #open the crossdomain file and read its contents
       response = open('crossdomain.xml', 'r').read()
      
       #write the data to the socket along with valid HTTP headers
       self.send_response(200)
       self.send_header("Content-type", "text/xml")
       self.send_header("Content-length", str(len(response)))
       self.end_headers()
       self.wfile.write(response)
       self.log_request(200)
      

    [/code]并在 OE 的 openerp-server/bin/ 目录下放上 crossdomain.xml,内容如下:[code]<?xml version="1.0"?>
    <cross-domain-policy>
    <allow-access-from domain="*" />
    </cross-domain-policy>[/code]我用 Silverlight3 在 Visual Studio 2010 下测试的,用了 code.google.com/p/xmlrpc-silverlight/ 提供的 XMLRPC 库。
    OpenERP 的 XML-RPC 端口是 80,其他的我没测试。

    调用 [检测到链接无效,已移除] 方法的结果见附件图。

    Flash 和 Silverlight 的 crossdomain.xml 是通用的,我对 Flash 无爱,各位能人请自行测试。

    [[i] 本帖最后由 oldrev 于 2010-4-21 22:28 编辑 [/i]]

    1 条回复 最后回复
    0
    • O 离线
      O 离线
      oldrev
      写于 最后由 编辑
      #2

      alwaysrev.spaces.live.com/blog/cns!218708052A8413FB!322.entry?&_c02_vws=1
      这篇润色了一下

      1 条回复 最后回复
      0
      • O 离线
        O 离线
        oldrev
        写于 最后由 编辑
        #3

        cid-218708052a8413fb.skydrive.live.com/self.aspx/.Public/Oldrev.AgXmlRpc.zip

        silverlight 程序源码下载,使用 Visual Studio 2010 编译,也带了编译好的程序,需要 Silverlight 3.

        1 条回复 最后回复
        0
        • mrshellyM 离线
          mrshellyM 离线
          mrshelly
          写于 最后由 编辑
          #4

          呵呵... 赞一下. 虽然不太喜欢微软的东西...

          1 条回复 最后回复
          0

          • 登录

          • 没有帐号? 注册

          • 登录或注册以进行搜索。
          • 第一个帖子
            最后一个帖子
          0
          • 版块
          • 标签
          • 热门
          • 用户
          • 群组