win2003+sp1下调用webservice遇到的奇怪问题

olioli 2006-07-12 10:56:01
开发环境为win2003+sp1 .net 2003 c#
我现在调用一个java写的webservice。webservice里面有一个login()方法和sendinfo(SessionId,content)方法,
login返回一个SessionId,在sendinfo的参数里填入SessionId和要发送的内容content。

首先,在win2000下先login,再sendinfo完全正常。

但是我换到正式发布的环境下在win2003+sp1下login()可以,并且返回一个可用的SessionId,再sendiofo就异常退出,而且捕获不到是什么异常。
经过试验发现在win2003+sp1下使用webservice里的方法Beginlogin()返回一个IAsyncResult类型的值handle,
再使用webservice里的方法Endlogin(handle)得到SessionId,这时再sendinfo也完全正常。不知道为什么
在win2003+sp1要用Beginlogin和Endlogin这种异步登陆的方式才能正常用sendinfo发送信息。

而且在win2000下或不加sp1的win2003下直接login,sendinfo都完全正常,相反用了Beginlogin和Endlogin失败。

咨询webservice的提供方,回复我可能login得到的SessionId过期,但是我再win2003+sp1断点跟踪到login,然后取
得SessionId,再通过ie访问这个webservice,点击里面的sendinfo,在页面上输入刚拿到的SessionId,发送成功!
证明SessionId没有过期。

不知道win2003+sp1下是否有什么网络限制会对直接login再send产生影响。

请诸位指点一下。我需要直接在win2003+sp1下使用login和sendinfo方法

附代码
同步登陆和发送
MyWS.SSer SS = new SendWSInfo.MyWS.SSer();//引用的webservice
string sessionid = SS.login(UsrID,PW);
string content = "test";
string result = SS.send(sessionid,content)

异步登陆和发送
MyWS.SSer SS = new SendWSInfo.MyWS.SSer();//引用的webservic
IAsyncResult handle = SS.Beginlogin(UsrID,PW,null,null);
string sessionid = SS.Endlogin(handle);
string content = "test";
string result = SS.send(sessionid,content);
...全文
228 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmens 2006-07-12
  • 打赏
  • 举报
回复
我觉得可能是在win2003+sp1下Session的存储机制和其他的不同。

试试在global文件中的:
application_start(session_start)中,随便保存一个session。



olioli 2006-07-12
  • 打赏
  • 举报
回复
就是下面这个函数

/// <remarks/>
[System.Web.Services.Protocols.SoapRpcMethodAttribute("", RequestNamespace="SSer", ResponseNamespace="SSer")]
[return: System.Xml.Serialization.SoapElementAttribute("return")]
public string sendinfo(string sessionId, string content) {
object[] results = this.Invoke("sendinfo", new object[] {
sessionId,
content});
return ((string)(results[0]));
}
olioli 2006-07-12
  • 打赏
  • 举报
回复
你指的是“Reference.cs”这个cs文件?这个文件里的sendinfo?
我可以在这个文件里加try和catch?
olioli 2006-07-12
  • 打赏
  • 举报
回复
你的意思是:有可能在win2003+sp1中login后cookiecontainer被清空了,所以导致send失败?
Knight94 2006-07-12
  • 打赏
  • 举报
回复
那你进入web引用后产生的cs文件中去跟踪一下,看看调用sendinfo函数中,所对应的引用函数中那个出现的异常。
olioli 2006-07-12
  • 打赏
  • 举报
回复
哦,那在win2000和win2003+sp1中有什么不同?
olioli 2006-07-12
  • 打赏
  • 举报
回复
没人知道吗?
Knight94 2006-07-12
  • 打赏
  • 举报
回复
在C#中为了保证访问的webservice在同一个session中,会创建cookiecontainer来付给webservice对象。
olioli 2006-07-12
  • 打赏
  • 举报
回复
up
olioli 2006-07-12
  • 打赏
  • 举报
回复
我写的是winform程序,不是web

12,162

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧