重新调用一个方法。

Meditate 2002-06-11 03:08:29
如果客户端调用一个方法,而丢失了服务器的响应,那么重新调用这个方法是不合适的。比如说,如果向服务器发送一个采购大量木材的订单,服务器已经介绍到这个请求并且进行了处理,但是客户机却丢失了服务器返回的响应,那么客户端重新尝试调用这个方式是不允许的。

-----------
但是在web service的体系结构中如何避免呢?
...全文
47 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Meditate 2002-06-13
  • 打赏
  • 举报
回复
谢谢知秋一叶兄!

这个我明白,我曾经做过类似的东西,看来还得重新造轮子!
烦哪!!!
Meditate 2002-06-13
  • 打赏
  • 举报
回复
呵呵!谢谢知秋一叶兄!
这个我明白的,我曾经做过,看来现在还得自己造轮子,烦哪!
qqchen79 2002-06-12
  • 打赏
  • 举报
回复
对呀,其实就是利用SoapHeader重新实现MSMQ的消息机制,但是具体的标准还没有定下来,所以M$也不能提供具体的实现。
自己做一个简单的模型应该不算很繁的说。:)
Meditate 2002-06-12
  • 打赏
  • 举报
回复
只秋一页兄所提到的方案是一种基于消息队列的架构,可以用MSMQ来实现(避免重造车轮),可是我看MOC(微软官方教材)上好像还有其他的方案,而不是使用这种方法,可是他并没有给出方案:(
Lostinet 2002-06-12
  • 打赏
  • 举报
回复
一个有效的模型可以这样:(类似于事务)(不知道是用什么语言)

function Post(mypostinfo)
{
done=false;
try
{
ID=SoapClient.Start_Post("postwhat")
SoapClient.Do_Post(mypostinfo,ID)
}catch(x){
//无论情况怎么样,申请无效的。
//重复这个过程,得到新的ID,重新发一次。
}

do
{
try
{
if(SoapClient.End_Post(ID))
{
done=true
break;
}
}
catch(x)
{
//这里不同,可能定单已经生成了。
//Cllient应该把ID保留。。那样可以下次查询
}
if(not_support_save)//如果没有办法保存了,放弃了。
{
break;
}
save(ID)
//这里要么确定是否重发,什么其他东西的。。。
//或者break;
}while(1)
return done;
}
Post(mypostinfo)
以后重复这个,一直到不想理会这个帐单为止:
(如果一直都联系不上,认命了吧?)

if(done==false)
{
//那么没有办法了,只能:
haveDone=false
coll=SoapClient.EnumMyPost()
for(i=0;i<coll.length;i++)
{
postinfo=coll.item(i)
if(CheckIsEqual(postinfo,mypostinfo))
{
haveDone=true
break
}
}
if(!havedone)Post(mypostinfo)
}
Lostinet 2002-06-12
  • 打赏
  • 举报
回复
那不是WebService的问题吧?是编程模式的问题。

例如最恶劣的情况,
发送定单后,连结果都收不到。。
[qqchen79的方法很通用]
但是应该是Client没有收到回复,应该传递ID去查询(当然Server也要提供查询定单的接口)
就好想打电话订饭,通常是打电话过去查询饭是否做好了,而不是重复要求做一份饭菜。

qqchen79 2002-06-11
  • 打赏
  • 举报
回复
比较简单的方法是给每个消息加个ID,Client没有受到回复就重发,Server受到重复的ID就忽略消息。
qqchen79 2002-06-11
  • 打赏
  • 举报
回复
这是目前WebService的主要问题之一,还没有标准的解决方法。
先要在Soap上面实现Route和Transaction支持,然后才有Reliable Message。
如果要自己实现的话可以参考这个:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnexxml/html/xml11192001.asp
qqchen79 2002-06-11
  • 打赏
  • 举报
回复
这是目前WebService的主要问题之一,还没有标准的解决方法。
先要在Soap上面实现Route和Transaction支持,然后才有Reliable Message。
如果要自己实现的话可以参考这个:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnexxml/html/xml11192001.asp

12,162

社区成员

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

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