我公司自己写了一个WEB SERVICE供外部调用,在自己的WEB SERVICE中又调用了外部服务,在调用外部服务时用MSXML2.XMLHTTPClass来生成XMLHTTP对象。
现在我发现如果多用户调用我公司的WEB SERVICE时,等待时间较长,容易死锁。
经测试发现多用户调用时,在执行objHTTP = new MSXML2.XMLHTTPClass()该语句时,执行就阻塞了,一般要等待半分钟左右才返回继续执行。最后发现规律是这样的:当第一个用户调用时,WEB SERVICE在执行到new MSXML2.XMLHTTPClass()时不会等待,这时第一个尚未执行结束,第二个调用紧接着就来,这时执行到new MSXML2.XMLHTTPClass()语句就阻塞了,必须等第一个调用结束后,第二个调用才能继续执行。如果外部调用语句也是用new MSXML2.XMLHTTPClass()生成HTTP类来调用的,那这时就惨了,WEB SERVICE在执行到new MSXML2.XMLHTTPClass()时就阻塞了,等待外部释放XMLHTTP类,但外部又在等待WEB SERVICE返回,所以就死锁了,死得很硬啊!原因不清楚,请各位大是不吝赐教!----------------------------------------------------
在自己的WEB SERVICE里调用外部服务是这样写的:objHTTP = new MSXML2.XMLHTTPClass();
xmlDOC=new MSXML2.DOMDocumentClass(); objHTTP.open("POST",url,false,Type.Missing,Type.Missing);
objHTTP.setRequestHeader("Host","localhost"); 
objHTTP.setRequestHeader("Content-Type", "text/xml;charset=utf-8");
objHTTP.setRequestHeader("Content-Length",data.Length.ToString());
objHTTP.send(data);