请教关于WebMethod方法阻塞问题

[复制链接]
查看11 | 回复0 | 2021-1-27 05:35:48 | 显示全部楼层 |阅读模式
请各位高手出招:
情景:
客户端A调用WSGetMessage,传入参数str,str是客户端B的ID,然后处于WaitOne()阻塞状态
客户端B调用WSSendMessage,传入参数str1和str2,str1是客户端B的ID,str2是要发送的消息,然后Set()使到evtGetMsgCompleted处于有信号状态,WSGetMessageReturn消息内容。
正常情况下,一对一没有问题,比如A调用WSGetMessage,然后B调用WSSendMessage。但如果A调用WSGetMessage,然后因为某些原因,A有调用一次WSGetMessage,此时客户端会报错,然后整个Webservice都会死掉。估计是evtGetMsgCompleted阻塞原因。各位有什么好办法解决吗?万分感谢!

publicAutoResetEventevtGetMsgCompleted=newAutoResetEvent(false);
[WebMethod(Description="Wrapper专用方法")]
publicstringWSGetMessage(stringstr)
{
MessageStructwsMsg=newMessageStruct();
if(dictSession[str].evtGetMsgCompleted.WaitOne())
{
wsMsg=msgQueue.Dequeue()asMessageStruct;
}
returnwsMsg._str3;
}
[WebMethod(Description="Wrapper专用方法")]
publicstringWSSendMessage(stringstr1,stringstr2)
{
MessageStructmsg=newMessageStruct();
msg._str2=str1;
msg._str3=str2;
lock(msgQueue)
{
msgQueue.Enqueue(msg);
dictSession[str1].evtGetMsgCompleted.Set();
}
returnstr1;
}
分 -->
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行