此处将为大家介绍关于服务器端获取webservice客户端IP地址的详细内容,并且为您解答有关服务器获取客户端ip和端口的相关问题,此外,我们还将为您介绍关于ASP.NET(.asmx)webserv
此处将为大家介绍关于服务器端获取webservice客户端IP地址的详细内容,并且为您解答有关服务器获取客户端ip和端口的相关问题,此外,我们还将为您介绍关于ASP.NET(.asmx)webservices中的客户端IP地址、axis 下的WebService 获取客户端IP代码、axis2 webservice 服务器端和客户端实现例子、CXF 部署WebService 在服务端回去客户端IP的方法的有用信息。
本文目录一览:- 服务器端获取webservice客户端IP地址(服务器获取客户端ip和端口)
- ASP.NET(.asmx)webservices中的客户端IP地址
- axis 下的WebService 获取客户端IP代码
- axis2 webservice 服务器端和客户端实现例子
- CXF 部署WebService 在服务端回去客户端IP的方法
服务器端获取webservice客户端IP地址(服务器获取客户端ip和端口)
一、基于xfire发布的webservice获取客户端ip的方法
public String getClientIp(){ String ip = ""; try { HttpServletRequest request = XFireServletController.getRequest(); ip = request.getRemoteAddr(); System.out.println("客户端ip=:"+ip); } catch (Exception e) { System.out.println("无法获取HttpServletRequest."); e.printstacktrace(); } return ip; }二、基于axis发布的webservice获取客户端ip的方法
public String getClientIpaxis() { MessageContext mc = null; HttpServletRequest request = null; try { mc = MessageContext.getCurrentMessageContext(); if (mc == null) throw new Exception(“无法获取到MessageContext”); request = (HttpServletRequest) mc.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST); System.out.println(“remote ip: ” + request.getRemoteAddr()); } catch (Exception e) { System.out.println(e.getMessage()); e.printstacktrace(); } return request.getRemoteAddr(); }
三、基于jax-ws开发的webservice获取客户端ip的方法【在代理类XXXDelegate添加如下代码】
import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.xml.ws.WebServiceContext; import javax.xml.ws.handler.MessageContext; @Resource private WebServiceContext wsContext; private String getClientInfo(){ MessageContext mc = wsContext.getMessageContext(); HttpServletRequest request = (HttpServletRequest)(mc.get(MessageContext.SERVLET_REQUEST)); String remortAddress = request.getRemoteAddr(); return (remortAddress); }
import javax.servlet.http.*; import javax.xml.rpc.server.*; import org.apache.axis.MessageContext; import org.apache.axis.transport.http.HTTPConstants; public class BaseService { public String getClientIp(){ MessageContext mc = MessageContext.getCurrentContext(); HttpServletRequest request = (HttpServletRequest) mc.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST); System.out.println("remote ip: " + request.getRemoteAddr()); return request.getRemoteAddr(); } }
ASP.NET(.asmx)webservices中的客户端IP地址
这些是我尝试过的一些方法:
Request.ServerVariables("REMOTE_HOST") HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; Request.UserHostAddress() Request.UserHostName() string strHostName = Dns.GetHostName(); string clientIPAddress = Dns.GetHostAddresses(strHostName).GetValue(0).ToString();
以上所有方法在我的本地系统上运行正常,但是当我在生产服务器上发布我的服务时,它开始给出错误,
Error: Object reference not set to an instance of an object. StackTrace:
at System.Web.Hosting.ISAPIWorkerRequestInProc.GetAdditionalServerVar(Int32 index)
at System.Web.Hosting.ISAPIWorkerRequestInProc.GetServerVariable(String name)
at System.Web.Hosting.ISAPIWorkerRequest.GetRemoteAddress()
at System.Web.HttpRequest.get_UserHostAddress()
解决方法
private string GetAdditionalServerVar(int index) { if (this._additionalServerVars == null) { this.GetAdditionalServerVariables(); } return this._additionalServerVars[index - 12]; }
我看到为什么会引发NullReferenceException的两个原因:
1)_additionalServerVars成员存在多线程问题.我不认为这可能发生,因为A)我不明白为什么在测试期间服务器上会有很大的负载,而且B)ISAPIWorkerRequestInProc实例可能与一个线程有关.
2)您的服务器不是最新的,生产中的代码与我在机器上看到的代码不同.
所以我要做的就是检查服务器,确保它与.NET Framework dll保持同步.
axis 下的WebService 获取客户端IP代码
import javax.xml.rpc.server.*;
import org.apache.axis.MessageContext;
import org.apache.axis.transport.http.HTTPConstants;
axis2 webservice 服务器端和客户端实现例子
【1.首先axis2的环境部署】
下载两个包: axis2-1.6.1-bin.zip axis2.war
解压axis2-1.6.1-bin.zip 包,放到d盘。
axis2.war文件放到tomcat服务器的webapps目录下。
浏览器地址:点击打开链接 表明axis2服务器端部署成功。
客户端可以用axis2-bin包中提供的wsdl2java.bat 工具实现。首先得配置环境。
(1)设置环境变量:
找到%AXIS2_HOME%\bin目录下的wsdl2java.bat.打开修改一下。
找到set_RUNJAVA="%JAVA_HOME%\bin\java"这一行下面加上一行
setJAVA_OPTS="-Djava.ext.dirs=%AXIS2_HOME%\lib"
eclipse下创建axis2client project
cmd 进入axis2client 目录生成存根代码
运行命令:
WSDL2java –uri http://localhost:8080/axis2/services/helloService?wsdl
【测试】
package cn.com.webxml; import cn.com.webxml.WeatherWebServiceStub.arrayofstring; public class Test { public static void main(String[] args) throws Exception { WeatherWebServiceStub stub = new WeatherWebServiceStub(); WeatherWebServiceStub.GetWeatherbyCityName request = new WeatherWebServiceStub.GetWeatherbyCityName(); request.setTheCityName("广州"); WeatherWebServiceStub.GetWeatherbyCityNameResponse response = stub.getWeatherbyCityName(request); arrayofstring arrayofstring = response.getGetWeatherbyCityNameResult(); //迭代出每一项 for(int i=0;i<arrayofstring.getString().length;i++){ System.out.println(arrayofstring.getString()[i]); } } }【运行结果】
【出现的问题】
服务器端service 是要打包成aar的。用java cvf hello.aar . 用axis插件都可以。
发布到D:\tomcat6\webapps\axis2\WEB-INF\services 目录下。
网上有很多的例子:
【参考资料】
http://www.voidcn.com/article/p-canlunpp-ua.html
http://www.lifeba.org/arch/java_axis2_webservice.html
http://tech.ddvip.com/2009-01/1232161765106125.html
http://aihhd2008.iteye.com/blog/602828
CXF 部署WebService 在服务端回去客户端IP的方法
最近在做 一个 WebService的服务端,遇到了问题就像把每个客户端请求的记录都给记下来,找了好久 这个可以了;小弟文字表达能力不太好,所以就只把关键代码贴上来
import javax.annotation.Resource;
import javax.xml.ws.WebServiceContext;
import org.apache.cxf.transport.http.AbstractHTTPDestination;
import javax.servlet.http.HttpServletRequest;
public class Send{
@Resource
private WebServiceContext context;public String getIp() {
MessageContext ctx = context.getMessageContext();
HttpServletRequest request = (HttpServletRequest)
ctx.get(AbstractHTTPDestination.HTTP_Request);
String ip=request.getRemoteAddr();
return ip;
}
}
关于服务器端获取webservice客户端IP地址和服务器获取客户端ip和端口的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于ASP.NET(.asmx)webservices中的客户端IP地址、axis 下的WebService 获取客户端IP代码、axis2 webservice 服务器端和客户端实现例子、CXF 部署WebService 在服务端回去客户端IP的方法等相关内容,可以在本站寻找。
本文标签: