Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

让 OE 的 XML-RPC 支持 Silverlight 和 Flash



  • 昨晚 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 下测试的,用了 [url=code.google.com/p/xmlrpc-silverlight/]http://code.google.com/p/xmlrpc-silverlight/[/url] 提供的 XMLRPC 库。
    OpenERP 的 XML-RPC 端口是 80,其他的我没测试。

    调用 <!-- m -->[url=http://localhost:80/common/about]http://localhost:80/common/about[/url]<!-- m --> 方法的结果见附件图。

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

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



  • 昨晚 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&#46;xml', 'r')&#46;read()
      
       #write the data to the socket along with valid HTTP headers
       self&#46;send_response(200)
       self&#46;send_header("Content-type", "text/xml")
       self&#46;send_header("Content-length", str(len(response)))
       self&#46;end_headers()
       self&#46;wfile&#46;write(response)
       self&#46;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 下测试的,用了 [url=code.google.com/p/xmlrpc-silverlight/]http://code.google.com/p/xmlrpc-silverlight/[/url] 提供的 XMLRPC 库。
    OpenERP 的 XML-RPC 端口是 80,其他的我没测试。

    调用 <!-- m -->[url=http://localhost:80/common/about]http://localhost:80/common/about[/url]<!-- m --> 方法的结果见附件图。

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

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



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



  • [url]cid-218708052a8413fb.skydrive.live.com/self.aspx/.Public/Oldrev.AgXmlRpc.zip[/url]

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



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


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待