Archive for 三月, 2010

在PHP的Soap Extension中, 对于SoapServer来说, 并没有方法可用得到/处理客户端发送的SoapHeader信息.
网上也有很多人认为, 只能通过读取POST过来的请求XML文件, 分析, 才能得到客户端发送过来的SoapHeader.

但, 其实在SoapServer端, 其实是有一种办法, 可用把SoapHeader当作一个请求来处理, 从而获取到客户端提交的SoapHeader信息.

假设客户端代码如下:

  1. <?php
  2. /*
  3. * 保存用户名和密码的载体
  4. */
  5. class SoapUserInfo {
  6.     /**
  7.       * @var char $name
  8.       */
  9.     public $name;
  10.     /**
  11.       * @var char $password
  12.       */
  13.     public $password;
  14.     public function __construct($l, $p) {
  15.         $this->Password = $p;
  16.         $this->Username = $l;
  17.     }
  18. }
  19. ?>

然后客户端生成SoapHeader

  1. <?php
  2.     $soap_header = new SoapHeader("http://www.laruence.com", 'Authorise'
  3.                , new SoapUserInfo('laruence', 'password'), false, SOAP_ACTOR_NEXT);
  4. ?>

也许细心的同学会注意到第4个参数FALSE第5个参数SOAP_ACTOR_NEXT, 这是什么呢? 我最后再讲.

然后, 创建客户端, 绑定SoapHeader

  1. <?php
  2.     $client = new SoapClient($wsdl);
  3.     $client->__setSoapHeaders(array($soap_header));
  4.     $client->__soapCall('request', array());
  5. ?>

现在, 客户端已经发起了请求, 请求中也包含了SoapHeader, 其中有了我们验证需要的用户名/密码信息.

那么, 在服务端, 该如何做呢?

  1. <?php
  2. $server = new SoapServer('laruence.wsdl');
  3. $server->setClass('InterfaceClass');
  4. $server->handle();
  5. ?>

关键的地方就在, 服务端接收请求以后, 会实例化一个处理类, 然后分析SoapHeader, 接着就会调用InterfaceClass::Authorise这个方法(Authorise是我们请求头中的变量名), 所以, 我们就可用在InterfaceClass类中, 定义个Authorise方法, 并在这个方法中对SoapHeader中的信息做验证.

然后, 请求体(Soap body)中的方法被调用, 因为不论Authorise方法返回什么(除非exit), 请求体中的方法一定会被调用, 所以要寻找个变量记录验证的结果.

  1. <?php
  2. class InterfaceClass {
  3.      /**
  4.       * @var bool $authorized
  5. */
  6.     private $authorized = FALSE;
  7.     /*
  8. * Authentication function
  9. *
  10. * @param string username
  11. * @param string password
  12. */
  13.     public function Authentication($username, $password) {
  14.           $this->authorized = validateUser($username, $password);
  15.     }
  16.     /*
  17. * Test method
  18. */
  19.     public function request(){
  20.           if ($this->authorized) {
  21.                //验证成功, 继续处理.
  22.           } else {
  23.                //验证失败, 拒绝请求.
  24.           }
  25.     }
  26. }
  27. ?>

当然, 对于网上说的另外一种方法, 通过分析请求的XML文件, 也可以:

  1. <?php
  2. class InterfaceClass {
  3.      /**
  4.       * @var bool $authorized
  5. */
  6.     private $authorized = FALSE;
  7.     function __construct() {
  8.          $xml = file_get_contents('php://input');
  9.          //分析xml, 获得SoapHeader数据, 验证
  10.     }
  11. }
  12. ?>

Must Understand

这个参数指明了, 是否服务端必须要了解SoapHeader, 如果这个参数为真, 而服务端并不能识别响应的Header, 则会引发一个Soap Fault(Header not understood).

SOAP_ACTOR_NEXT

actor指明了SoapHeader要传递给谁, 被谁处理.

SOAP_ACTOR_NEXT的意思就是, 下一个接受到这个请求头的Service, 在本文的例子中只有一个Server,当然也就没有关系了.

在SoapServer的构造函数中, 我们可以指明一个Server的Actor, 比如:

  1. <?php
  2. $server = new SoapServer($wsdl, array('actor' => 'laruence'));
  3. ?>

这样, 我们就可以在Client的SoapHeader中, 通过设置actor是laruence, 来让指定的Server来获得我们设置的头部的信息.

转自:风雪之隅

发现searchindexer.exe占用资源很高,从服务里停掉了(开始运行services.msc,windows search服务)。

然后换了google桌面搜索,目前来看资源占用节省了许多,但google桌面还在索引中,等索引完成了才能知道好不好用。

1.项目技术负责人(暂不管他叫什么O),要做的并不是解决技术难点,而是对整个项目负责。包括项目文档化、项目进度化、进度追踪等等一序列的问题。既然做的是项目就不再是一个人挑天下的时候,不再是以攻克某一技术难题为工作乐趣。

2.行之有效,工作内容、方法,也包括语言。不管是管理者、普通工员、甚至普通人,都要对自己说出的话行之有效。说过今天完成的事情,等到明天完成就已经是很糟糕的,但还可以稍许容忍,而如果到了后天或者N天之后还没有完成或进展,那一切的借口都已经不再成为理由。

3.沟通。对于许诺却又没办法完成的时候,等对方来催是一个最糟糕的事情,如果承诺周五完成的事情因情况无法如愿,那么就应该在周四最迟周五早晨给对方解析,必须主动的去做这件事,而不是心存侥幸的想对方也许也忘了,或者对方也并不着急。

4.做事不能仅仅为了完成这件事情而去做,要想着如何提高自己,而提高自己也是多元化的东西,并不是你做程序提高的就只是编程能力。

站长之家Chinaz.com 3月24日报道:房子问题找Google,车子问题靠百度,这是中国绝大部分站长的真实写照。而就在刚刚过去的中国搜索引擎市场格局大变的情况下,有用户直言,不仅优化与推广艰难,甚至连搜索的基本需求也变得有些奢侈。

程序员小发告诉站长之家,在无法使用其他更有效的搜索工具的前提下,他重新回到百度的怀抱,但令他惊讶的是,在百度搜索mysql一词,居然第一页都没有官方网站的地址,如果按照百度更懂中文的理念来看,确实无可厚非,但搜索的本质却因此改变了。

在百度搜索Mysql的结果(站长之家配图)

同样,在搜索PHP这一词时,遭遇了更加疯狂的搜索结果。

在百度搜索PHP的结果(站长之家配图)

此外,有站长称,最近一周百度的更新规律也发生超预期的变化,部分收录结果甚至是网站的关键词在一天之内的波动都非常大,而且对于一些不相关的网站也会出现在搜索结果中,在过去的七天内就曾经发生过在搜索淘宝、淘宝网时出现一家游戏网站的结果,而这个网站仅仅是在友情链接中出现了一个名为淘宝网的锚文本链接。

有用户担心,搜索市场格局的变化会导致百度的彻底独大或停滞不前,而在这个新百度搜索时代,优化推广还好不好做,成为站长与推广人员的一大心结。

不过,以框计算的理念来看,满足全民搜索需求的百度仍有巨大的市场空间,这样才能在多元化搜索需求的今天立于不败之地。(完)