前些天做了一個(gè)小系統(tǒng)用到webservice, 只有客戶端 (外網(wǎng)的servcice), 公司的網(wǎng)絡(luò)環(huán)境是采用代理上網(wǎng).
走了好多彎路才調(diào)通, 現(xiàn)在分享一下, 希望能對(duì)在這方面感到困惑的朋友有一點(diǎn)幫助.
我采用的框架是axis2.
//options用來(lái)包容客戶端的各種設(shè)置
Options options = new Options();
//設(shè)置地址
options.setTo(
new EndpointReference(address));
//設(shè)置服務(wù)端認(rèn)證. , 開始的時(shí)候沒有設(shè)host和domain, 認(rèn)證通不過(guò), 生成的http header 中也沒有認(rèn)證信息. 搞了好半天才發(fā)現(xiàn)必須設(shè)置主機(jī)和域名(服務(wù)器端的)
HttpTransportProperties.Authenticator auth=new HttpTransportProperties.Authenticator();
auth.setUsername("Administrator");
auth.setPassword("2222");
auth.setHost("test.xxx.com");
auth.setDomain("test.xxxx.com");
options.setProperty(HTTPConstants.AUTHENTICATE, auth);
options.setAction("Execute");
//必須設(shè)置http version為1.0, 這樣客戶端的代理屬性才起作用.
options.setProperty(HTTPConstants.HTTP_PROTOCOL_VERSION,
HTTPConstants.HEADER_PROTOCOL_10);
//proxy settings
ProxyProperties proxyProperties=new ProxyProperties();
proxyProperties.setProxyName("PROXYSERVER");
proxyProperties.setProxyPort(8080);
proxyProperties.setUserName("luyanbo");
proxyProperties.setPassWord("sand");
proxyProperties.setDomain("sand.cn");
options.setProperty(HTTPConstants.PROXY, proxyProperties);
ServiceClient servicClient = new ServiceClient();
servicClient.setOptions(options);
//發(fā)送并接收
OMElement result = servicClient.sendReceive(getAuthXml());
用的過(guò)程中, 發(fā)現(xiàn)axis2的文檔實(shí)在太粗略了, 很多不該省略的地方也省了, 像代理屬性設(shè)置里面, http版本的設(shè)置就沒有提到. 可能他們也是發(fā)揚(yáng)風(fēng)格. 怎么省事怎么來(lái)的吧
posted on 2007-09-24 18:30
人生如戲 閱讀(3893)
評(píng)論(6) 編輯 收藏