php soap client 调用.net service的实例

Filed Under (未分类) by admin on 23-03-2012

Tagged Under : ,

最近做第三方平台登录的东西。要支持某一个大型国企的用户帐号登录。我说某大型国企也太他妈的烂了。 囧。。自己做了个开放平台还不给人用。好好的oauth不用,

用的什么鸟验证方式。。折腾死了。

正题:

开始不懂 soap client 怎么把参数传递给函数。

对于 complexType类型参数的传递。 要先 new 一个 stdClass,

例如有 a,b,c,d参数。赋值方式是:

$params = new stdClass();

$params->a = valuea;

$params->b = valueb;

$params->c = valuec;

$params->d = valued;
$client = new SoapClient($wsdl);

$r = $client->function($params);
另外,php soap client 调用 服务端为.net 和 php 的传参方式是不一样的。
参考资料:

http://www.codingfriends.com/index.php/2010/04/16/soap-client-calling-net-web-service/

http://www.iteye.com/topic/152042

solr配置遇到的错误及解决方法

Filed Under (未分类) by admin on 28-02-2012

1.

HTTP Status 500 - Severe errors in solr configuration. Check your log files for more detailed information on what may be wrong. If you want solr to continue after configuration errors, change: <abortOnConfigurationError>false</abortOnConfigurationError> in solr.xml
-------------------------------------------------------------
org.apache.solr.common.SolrException: Error loading class 'solr.VelocityResponseWriter'

解决方法是:

<queryResponseWriter name="velocity".VelocityResponseWriter" enable=false/>

找到这个配置,去掉。

http://serverfault.com/questions/336158/org-apache-solr-common-solrexception-error-loading-class-solr-velocityresponse

转:Thrift的简单使用

Filed Under (未分类) by admin on 14-12-2011

Tagged Under :

Thrift( http://github.com/facebook/thrift )是一个跨语言服务部署架构,2007年由Facebook开发,之后在2008年加到Apache计划中( http://incubator.apache.org/thrift/ )。它是类似于SOAP,CORBA以及Google Protocol Buffers这样的服务架构。Thrift提供了完整client/server RPC的实现,只需要定义好中间定义语言,就可以生成指定语言的代码(包括client和server)。

Thrift能生成的语言有: C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml

使用thrift,以下例子你可以在 http://incubator.apache.org/thrift/ 中找到。

定义.thrift接口文件。


你需要知道thrift所支持的类型( http://wiki.apache.org/thrift/ThriftTypes )

下面是一个简述:

类型 描述
bool true, false
byte 8位的有符号整数
i16 16位的有符号整数
i32 32位的有符号整数
i64 64位的有符号整数
double 64位的浮点数
string UTF-8编码的字符串
binary 字符数组
struct 结构体
list<type> 有序的元素列表,类似于STL的vector
set<type> 无序的不重复元素集,类似于STL的set
map<type1,type2> key-value型的映射,类似于STL的map
exception 是一个继承于本地语言的exception基类
service 服务。包含多个函数接口(纯虚函数)

在了解过thrift内置类型之后,我们可以简单地定义一个服务,把用户的信息从前端发送到服务器,然后当需要的时候再从服务器获取某个用户的信息:

  1. struct UserProfile {
  2.   1: i32 uid,
  3.   2: string name,
  4. }
  5. service UserStorage {
  6.   void store(1: UserProfile user),
  7.   UserProfile retrieve(1: i32 uid)
  8. }

把以上代码存到 service.thrift文件中。

如果我们需要用python来做输出语言。就在命令行中输入:

  1. thrift  –r  –gen  py  service.thrift

之后,你就会在当前目录下看到一个新建的目录叫”gen-py”,在里面你就可以看到由service.thrift生成的python服务接口代码。

UserStorage.py中的Client就是客户端调用的接口,只需要创建一个Client实例就可以调用例子中的store和retrieve的接口。而Iface就是服务端所需要实现的接口,对应例子中的store和retrieve的逻辑处理。

ttypes.py是存放枚举类型的结构。

UserStorage-remote.py是一个客户端调用服务接口的demo示例,想知道详细的可以去看看。

转自:http://blog.csdn.net/MyOnlyLee/article/details/5289380

java mysql获得最后插入的ID

Filed Under (java) by admin on 08-09-2011

sql = “INSERT INTO `sitescreentype`(`screen`) VALUES(‘” + screen + “‘)” ;
stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
rs = stmt.getGeneratedKeys();
if(rs.next())
{
lanId = rs.getInt(1);
}

java 时间操作例子

Filed Under (java) by admin on 02-09-2011

import java.util.Calendar;
import java.util.Date;

Calendar cd = Calendar.getInstance();

cd.get(Calendar.DAY_OF_YEAR);

cd.set(Calendar.YEAR, Calendar.DAY_OF_YEAR+1);  // Calendar.YEAR  int类型,常数

Date t = cd.getTime();  //Calendar 和 Date 的关系   Mon Sep 12 04:12:00 CST 2011

long time = t.getTime(); // 转为 时间戳
字符串转为时间戳:

String strDate = “201109120412″;
SimpleDateFormat sdf = new SimpleDateFormat(“yyyyMMddHHmm”);
try{
Date date = sdf.parse(strDate);
System.out.println(date.getTime());  //long 类型
}catch(Exception e){

}

输出结果为:

Mon Sep 12 04:12:00 CST 2011
1315771920000

java io 操作例子备忘

Filed Under (java) by admin on 02-09-2011

1. 读取一个文件:

File read = new File(“/home/darlin/e.log”);
BufferedReader br = new BufferedReader(new FileReader(read));
String temp = null;
while((temp = br.readLine()) != null){
String line[] = temp.split(“\\|”);
if(line.length<4){
System.out.println(“wrong”);
continue;
}
System.out.println(line[1]);
}

2. 列出一个目录的文件:

File dir = new File(“/home/darlin/”);

String[] fileList = dir.list();

int i;

for(i=0; i<=fileList.length; i++){

System.out.println(fileList[i]);

}

java mysql操作实例

Filed Under (java) by admin on 29-08-2011

1. 连接数据库

String url = “jdbc:mysql://host:port/databaseName?useUnicode=true&characterEncoding=charset” ;

Class.forName(“com.mysql.jdbc.Driver”);
Connection DriverManager.getConnection(url, user, password);

2. 执行sql语句

获得smtp对象

Statement stmt = conn.createStatement();

sql = “SELECT count(*) AS `count` FROM `ip9`”;
rs = stmt.executeQuery(sql);

statement excuteQuery,excuteUpdate,excute 的区别:

方法 executeQuery 用于产生单个结果集的语句,例如 SELECT 语句。

方法 executeUpdate 用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言) 语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。

方法 execute 用于执行返回多个结果集、多个更新计数或二者组合的语句。因为多数程序员不会需要该高级功能,所以本概述后面将在单独一节中对其进行介绍。

3. 获取结果:

ResultSet rs = stmt.getResultSet();

if(rs.next()){

}

while(rs.next()){

}

getInt(“id”)或getSting(“name”),返回当前游标下某个字段的值

4. 关闭链接

conn.close()

主机字节序和网络字节序

Filed Under (C) by admin on 18-08-2011

Tagged Under :

主机字节序:

不同的CPU有不同的字节序类型,这些字节序是指整数在内存中保存的顺序,这个叫做主机序。最常见的有两种 1.Little endian:低字节存高地址,高字节存低地址 2.Big endian:低字节存低地址,高字节存高地址

网络字节序:

网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。

为了进行转换bsd socket提供了转换的函数,有下面四个网络与主机字节转换函数:htons ntohs htonl ntohl (s 就是short l是long h是host n是network)

htons 把unsigned short类型从主机序转换到网络序,htonl 把unsigned long类型从主机序转换到网络序,ntohs 把unsigned short类型从网络序转换到主机序,ntohl 把unsigned long类型从网络序转换到主机序。

在使用little endian的系统中 这些函数会把字节序进行转换 在使用big endian类型的系统中这些函数会定义成空宏

[转载]Linux中查看系统资源占用情况的命令

Filed Under (linux) by admin on 17-08-2011

Tagged Under :

top:
主要参数
d:指定更新的间隔,以秒计算。
q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。
c:显示进程完整的路径与名称。
S:累积模式,会将己完成或消失的子行程的CPU时间累积起来。
s:安全模式。
i:不显示任何闲置(Idle)或无用(Zombie)的行程。
n:显示更新的次数,完成后将会退出to
显示参数:
PID(Process ID):进程标示号。
USER:进程所有者的用户名。
PR:进程的优先级别。
NI:进程的优先级别数值。
VIRT:进程占用的虚拟内存值。
RES:进程占用的物理内存值。
SHR:进程使用的共享内存值。
S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
%CPU:该进程占用的CPU使用率。
%MEM:该进程占用的物理内存和总内存的百分比。
TIME+:该进程启动后占用的总的CPU时间。
Command:进程启动的启动命令名称,如果这一行显示不下,进程会有一个完整的命令行。
top命令使用过程中,还可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的。
<空格>:立刻刷新。
P:根据CPU使用大小进行排序。
T:根据时间、累计时间排序。
q:退出top命令。
m:切换显示内存信息。
t:切换显示进程和CPU状态信息。
c:切换显示命令名称和完整命令行。
M:根据使用内存大小进行排序。
W:将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

free
1.作用
free命令用来显示内存的使用情况,使用权限是所有用户。

2.格式
free [-b-k-m] [-o] [-s delay] [-t] [-V]

3.主要参数
-b -k -m:分别以字节(KB、MB)为单位显示内存使用情况。
-s delay:显示每隔多少秒数来显示一次内存使用情况。
-t:显示内存总和列。
-o:不显示缓冲区调节列。

uptime

18:59:15 up 25 min, 2 users, load average: 1.23, 1.32, 1.21
现在的时间
系统开机运转到现在经过的时间
连线的使用者数量
最近一分钟,五分钟和十五分钟的系统负载
参数: -V 显示版本资讯。

vmstat

procs ———–memory———- —swap– —–io—- –system– —-cpu—-
r b swpd free buff cache si so bi bo in cs us sy id wa
0 1 24980 10792 8296 47316 5 19 205 52 1161 698 26 3 1 70
1 观察磁盘活动情况
磁盘活动情况主要从以下几个指标了解:
bi:表示从磁盘每秒读取的块数(blocks/s)。数字越大,表示读磁盘的活动越多。
bo:表示每秒写到磁盘的块数(blocks/s)。数字越大,表示写磁盘的活动越多。
wa:cpu等待磁盘I/O(未决的磁盘IO)的时间比例。数字越大,表示文件系统活动阻碍cpu的情况越严重,因为cpu在等待慢速的磁盘系统提供数据。wa为0是最理想的。如果wa经常大于10,可能文件系统就需要进行性能调整了。
2 观察cpu活动情况
vmstat比top更能反映出cpu的使用情况:
us:用户程序使用cpu的时间比例。这个数字越大,表示用户进程越繁忙。
sy: 系统调用使用cpu的时间比例。注意,NFS由于是在内核里面运行的,所以NFS活动所占用的cpu时间反映在sy里面。这个数字经常很大的话,就需要注 意是否某个内核进程,比如NFS任务比较繁重。如果us和sy同时都比较大的话,就需要考虑将某些用户程序分离到另外的服务器上面,以免互相影响。
id:cpu空闲的时间比例。
wa:cpu等待未决的磁盘IO的时间比例。

iostat

用于统计CPU的使用情况及tty设备、硬盘和CD-ROM的I/0量
参数:
-c 只显示CPU行
-d 显示磁盘行
-k 以千字节为单位显示磁盘输出
-t 在输出中包括时间戳
-x 在输出中包括扩展的磁盘指标

avg-cpu: %user %nice %sys %iowait %idle
20.25 0.18 2.61 76.39 0.57
%iowait 等待本地I/O时CPU空闲时间的百分比
%idle 未等待本地I/O时CPU空闲时间的百分比

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
hda 9.86 284.34 84.48 685407 2036
每秒传输数(tps)、每秒512字节块读取数(Blk_read/s)、每秒512字节块写入数(Blk_wrtn/s)和512字节块读取(Blk_read)和写入(Blk_wrtn)的总数量。

系统
# uname -a # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看计算机名
# lspci -tv # 列出所有PCI设备
# lsusb -tv # 列出所有USB设备
# lsmod # 列出加载的内核模块
# env # 查看环境变量
资源
# free -m # 查看内存使用量和交换区使用量
# df -h # 查看各分区使用情况
# du -sh # 查看指定目录的大小
# grep MemTotal /proc/meminfo # 查看内存总量
# grep MemFree /proc/meminfo # 查看空闲内存量
# uptime # 查看系统运行时间、用户数、负载
# cat /proc/loadavg # 查看系统负载
磁盘和分区
# mount | column -t # 查看挂接的分区状态
# fdisk -l # 查看所有分区
# swapon -s # 查看所有交换分区
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE # 查看启动时IDE设备检测状况
网络
# ifconfig # 查看所有网络接口的属性
# iptables -L # 查看防火墙设置
# route -n # 查看路由表
# netstat -lntp # 查看所有监听端口
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息
进程
# ps -ef # 查看所有进程
# top # 实时显示进程状态
用户
# w # 查看活动用户
# id # 查看指定用户信息
# last # 查看用户登录日志
# cut -d: -f1 /etc/passwd # 查看系统所有用户
# cut -d: -f1 /etc/group # 查看系统所有组
# crontab -l # 查看当前用户的计划任务
服务
# chkconfig –list # 列出所有系统服务
# chkconfig –list | grep on # 列出所有启动的系统服务
程序
# rpm -qa # 查看所有安装的软件包

source:http://blog.csdn.net/gnuhpc/article/details/4368846

[转载]gdb常用命令

Filed Under (C, linux) by admin on 17-08-2011

Tagged Under :

调用gdb编译需要在cc后面加 -g参数再加-o;

[root@redhat home]#gdb 调试文件:启动gdb

(gdb) l :(字母l)从第一行开始列出源码

(gdb) break n :在第n行处设置断点

(gdb) break func:在函数func()的入口处设置断点

(gdb) info break: 查看断点信息

(gdb) r:运行程序

(gdb) n:单步执行

(gdb) c:继续运行

(gdb) p 变量 :打印变量的值

(gdb) bt:查看函数堆栈

(gdb) finish:退出函数

(gdb) shell 命令行:执行shell命令行

(gdb) set args 参数:指定运行时的参数

(gdb) show args:查看设置好的参数

(gdb) show paths:查看程序运行路径;

set environment varname [=value] 设置环境变量。如:set env USER=hchen;

show environment [varname] 查看环境变量;

(gdb) cd 相当于shell的cd;

(gdb)pwd :显示当前所在目录

(gdb)info program: 来查看程序的是否在运行,进程号,被暂停的原因。

(gdb)clear 行号n:清除第n行的断点

(gdb)delete 断点号n:删除第n个断点

(gdb)disable 断点号n:暂停第n个断点

(gdb)enable 断点号n:开启第n个断点

(gdb)step:单步调试如果有函数调用,则进入函数;与命令n不同,n是不进入调用的函数的

  • list :简记为 l ,其作用就是列出程序的源代码,默认每次显示10行。
  • list 行号:将显示当前文件以“行号”为中心的前后10行代码,如:list 12
  • list 函数名:将显示“函数名”所在函数的源代码,如:list main
  • list :不带参数,将接着上一次 list 命令的,输出下边的内容。
注意 :如果运行list 命令得到类似如下的打印,那是因为在编译程序时没有加入 -g 选项:
(gdb) list
1       ../sysdeps/i386/elf/start.S: No such file or directory.
in ../sysdeps/i386/elf/start.S
  • run:简记为 r ,其作用是运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步的命令。
  • 回车:重复上一条命令。
  • set args:设置运行程序时的命令行参数,如:set args 33 55
  • show args:显示命令行参数
  • continue:简讯为 c ,其作用是继续运行被断点中断的程序。
  • break:为程序设置断点。
  • break 行号:在当前文件的“行号”处设置断点,如:break  33
  • break 函数名:在用户定义的函数“函数名”处设置断点,如:break cb_button
  • info breakpoints:显示当前程序的断点设置情况
  • disable breakpoints Num:关闭断点“Num”,使其无效,其中“Num”为 info breakpoints 中显示的对应值
  • enable breakpoints Num:打开断点“Num”,使其重新生效
  • step:简记为 s ,单步跟踪程序,当遇到函数调用时,则进入此函数体(一般只进入用户自定义函数)。
  • next:简记为 n,单步跟踪程序,当遇到函数调用时,也不进入此函数体;此命令同 step 的主要区别是,step 遇到用户自定义的函数,将步进到函数中去运行,而 next 则直接调用函数,不会进入到函数体内。
  • until:当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。
  • finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。
  • stepi或nexti:单步跟踪一些机器指令。
  • print 表达式:简记为 p ,其中“表达式”可以是任何当前正在被测试程序的有效表达式,比如当前正在调试C语言的程序,那么“表达式”可以是任何C语言的有效表达式,包括数字,变量甚至是函数调用。
  • print a:将显示整数 a 的值
  • print ++a:将把 a 中的值加1,并显示出来
  • print name:将显示字符串 name 的值
  • print gdb_test(22):将以整数22作为参数调用 gdb_test() 函数
  • print gdb_test(a):将以变量 a 作为参数调用 gdb_test() 函数
  • bt:显示当前程序的函数调用堆栈。
  • display 表达式:在单步运行时将非常有用,使用display命令设置一个表达式后,它将在每次单步进行指令后,紧接着输出被设置的表达式及值。如: display a
  • watch 表达式:设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序。如: watch a
  • kill:将强行终止当前正在调试的程序
  • help 命令:help 命令将显示“命令”的常用帮助信息
  • call 函数(参数):调用“函数”,并传递“参数”,如:call  gdb_test(55)
  • layout:用于分割窗口,可以一边查看代码,一边测试:
  • layout src:显示源代码窗口
  • layout asm:显示反汇编窗口
  • layout regs:显示源代码/反汇编和CPU寄存器窗口
  • layout split:显示源代码和反汇编窗口
  • Ctrl + L:刷新窗口
  • quit:简记为 q ,退出gdb