我的应用程序假设连接Web服务并激活他的一些功能。 首先,应用程序激活一个“登录”功能,该功能作为参数用户名和密码,该功能搜索数据库中的用户名和密码,如果我是否登录则返回给我。并为我创建一个会话变量,如:
Session["Username"] = User.Username;
Session["FullName"] = User.FullName;
以及更多......
并且我希望激活另一个webservice函数 - UpdateProfile 这会改变我在数据库中的个人资料值。
所以,我的应用程序有一个包含一些私有类的类(asynctasks) 每个asynctask都负责Web服务中的一个功能。
例如- 登录asynctask:
private class LoginAsyncTask extends AsyncTask<String, String, User>
{
private String METHODNAME = "Login";
private String SOAPACTION = "http://tempuri.org/Login";
以及更多......
在这个登录asynctask我解析像这样的回传cookie:
cookies is a HashMap<String, String>();
try
{
//respHeaders = trans.call(SOAPACTION, envelope, null);
reshttpHeaders = trans.call(SOAPACTION, envelope, null);
}
catch (Exception e)
{
//connection error.
e.printStackTrace();
return null;
}
cookies.clear();
if (reshttpHeaders!=null) {
for (int i = 0; i < reshttpHeaders.size(); i++) {
HeaderProperty hp = (HeaderProperty)reshttpHeaders.get(i);
String key = hp.getKey();
String value = hp.getValue();
if (key!=null && value!=null) {
if (key.equalsIgnoreCase("set-cookie")){
String cookieString = value.substring(0,value.indexOf(";") );
cookies.put(cookieString.substring(0, cookieString.indexOf("=")),cookieString.substring(cookieString.indexOf("=")+1) );
break;
}
}
}
}
而且,在另一个名为UpdateProfileAsynctask的asynctask中 我发送这样的cookie:
List<HeaderProperty> httpHeaders = new ArrayList<HeaderProperty>();
for (String cookie:cookies.keySet()) {
httpHeaders.add(new HeaderProperty("Cookie", cookie + "=" + cookies.get(cookie)));
}
try
{
//trans.call(SOAPACTION, envelope, reqHeaders);
trans.call(SOAPACTION, envelope, httpHeaders);
}
当我尝试使用wireshark捕获此数据包时,我看到我得到的cookie是: Set-Cookie:ASP.NET_SessionId = kmwn4l2qzc0k1anfk1du4ty1;路径= /;仅Http \ r \ n
我发送的cookie是: Cookie:ASP.NET_SessionId = kmwn4l2qzc0k1anfk1du4ty1 \ r \ n
问题是网络服务不认识我(第二个请求是在20分钟内)。
运行webservice中的这部分代码:
if (Session["Username"] == null)
return "Cant Update profile now, Your connection seems to be timeout";
我一直收到这条消息。但它有时候它的工作:/
感谢。
答案 0 :(得分:0)
我在阅读你的问题后解决了我的问题,谢谢。 我的代码就像下面的代码:
HeaderProperty headerPropertySessionId = new HeaderProperty(“Cookie”,“key1 = value1”); List headerPropertyList = new ArrayList(); headerPropertyList.add(headerPropertySessionId);