在谈Unity3d webPlayer安全沙箱机制之webservices配合

使用Unity3d做过一些项目,一般是发布为单机版;链接数据库、链接Webservices等都使用过,通常编辑环境下没问题的发布后一般也不会有什么大问题。

现在碰到一个项目需要把Unity3d发布为Web版本,起初也没在意还是按照以往的经验和步骤进行开发。基本开发完成进行测试需要部署在服务器上时,出现了一个很大的问题与webservices链接不上。起初也没当回事,知道unity3d和flash类似基于安全原因采用了“安全沙箱机制”,于是在服务器的wwwroot放置了"crossdomain.xml"的文件。

内容如下:

<?xml version="1.0" ?> 
 <cross-domain-policy>
  <allow-access-from domain="*" /> 
  </cross-domain-policy>

进行测试发现还是未能与webservices进行链接,于是开始陷入了crossdomain.xml的圈子里开始查看官方的资料,查找“crossdomain.xml”的初始定义。看到官方文档中提到“crossdomain.xml”存储格式必须为ASCII,于是进行编码转换后测试仍然不行。继续各种论坛、百度等搜索找到,说在unity3d安装目录“Editor\Data\Tools\SocketPolicyServer”有官方提供的一种策略,可以在服务器上"cmd"下执行,可以为跨域访问数据提供安全策略许可。于是按照操作拷贝到服务器中,在命令行“CMD”下执行“sockpol.exe --all”,进行测试依然不行。我茫然了项目测试在即,如果不能顺利链接webservices就会导致项目整体进度推迟。

于是在进行深入了解我想起了一款利器“HttpWatch”,如果熟悉web开发模式应该对它不陌生,这个工具可以监控整个web页面所访问的资源情况,通过它可以很清楚观察各种在前台看不到了情况。

运行发现一个有趣的现象如图:


红色框图部分就是unity3d的webPlayer访问的webservices的地址,看到POST请求过后返回的状态“500 Internal Server Error“,我恍然大悟原来是我的webservices在发布时提供的POST方式缺失造成的。于是在web.config中”system.web“中添加如下节点配置:

<webServices>
        <protocols>
          <add name="HttpSoap"/>
          <add name="HttpPost"/
          <add name="HttpGet"/>
          <add name="Documentation"/>
        </protocols>
</webServices>
重新链接久违的画面终于出现了,也算是松了口气。

总结一下:开始一直在”crossdomain.xml“中打转转原因是不知道它的运行机制,只是道听途说,不断的尝试浪费的很多时间。最后还是从新梳理请求的数据情况找到问题的正解。这也许是一切问题本来就很简单吧。

希望能帮助一些遇到和我一样问题的亲们。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值