在访问IIS7的网站时,可能会遇到ServiceUnavailable的错误,错误的原因当然可能会有很多种,因此需要使用Just-In-Time Debugger来gointo到实际的内部错误。
错误信息:
System.ServiceModel.CommunicationException was unhandled
<wbr> Message=There was an error in serializing bodyof message SearchRequest1: '<strong>Unable to generate a temporaryclass</strong> (result=1).<br> error CS2001: Source file'<strong>C:\Windows\TEMP\</strong>s0phakvt.0.cs' could not befound<br> error CS2008: No inputs specified<br> '.<wbr> Please see InnerException for moredetails.<br><wbr> Source=mscorlib<br><wbr> StackTrace:<br><wbr><wbr><wbr> Server stacktrace:<br><wbr><wbr><wbr><wbr><wbr><wbr>atSystem.ServiceModel.Dispatcher.XmlSerializerOperationFo<wbr>rmatter.SerializeBody(XmlDictionaryWriterwriter, MessageVersion version, String action, MessageDescriptionmessageDescription, Object returnValue, Object[] parameters,Boolean isRequest)<br><wbr><wbr><wbr><wbr><wbr><wbr>atSystem.ServiceModel.Dispatcher.OperationFormatter.OperationFormatterMessag<wbr>e.OperationFormatterBodyWr<wbr>iter.OnWriteBodyContents(XmlDictionaryWriterwriter)<br><wbr><wbr><wbr><wbr><wbr><wbr>atSystem.ServiceModel.Channels.BodyWriter.WriteBodyContents(XmlDictionaryWriterwriter)<br><wbr><wbr><wbr><wbr><wbr><wbr>atSystem.ServiceModel.Channels.Message.OnWriteMessage(XmlDictionaryWriterwriter)<br><wbr><wbr><wbr><wbr><wbr><wbr>atSystem.ServiceModel.Channels.BufferedMessageWriter.WriteMessage(Messagemessage, BufferManager bufferManager, Int32 initialOffset, Int32maxSizeQuota)<br><wbr><wbr><wbr><wbr><wbr><wbr>atSystem.ServiceModel.Channels.TextMessageEncoderFactor<wbr>y.TextMessageEncoder.WriteMessage(Messagemessage, Int32 maxMessageSize, BufferManager bufferManager, Int32messageOffset)<br><wbr><wbr><wbr><wbr><wbr><wbr>atSystem.ServiceModel.Channels.HttpOutput.SerializeBufferedMessage<wbr>(Messagemessage)<br><wbr><wbr><wbr><wbr><wbr><wbr>at System.ServiceModel.Channels.HttpOutput.Send(TimeSpantimeout)<br><wbr><wbr><wbr><wbr><wbr><wbr>atSystem.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.SendRequest(Messagemessage, TimeSpan timeout)<br><wbr><wbr><wbr><wbr><wbr><wbr>at System.ServiceModel.Channels.RequestChannel.Request(Messagemessage, TimeSpan timeout)<br><wbr><wbr><wbr><wbr><wbr><wbr>at System.ServiceModel.Channels.ServiceChannel.Call(String action,Boolean oneway, ProxyOperationRuntime operation, Object[] ins,Object[] outs, TimeSpan timeout)<br><wbr><wbr><wbr><wbr><wbr><wbr>atSystem.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessagemethodCall, ProxyOperationRuntime operation)<br><wbr><wbr><wbr><wbr><wbr><wbr>at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessagemessage)</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
解决办法:
右键点击C:\Windows\TEMP目录,选择 properties->security ,添加 MachineName\IIS_IUSRS账户(将MachineName替换成实际的服务器名称),给予它Read、Write、List等权限。再重新访问这个ASP页面,问题应该能够得到解决。
原因分析:
应该是在你的ASP页面中,调用了别的Web Service/WCFService,ASP.NET WebService有时候会在处理WebMethods时使用到C:\Windows\TEMP文件夹,因此需要给IIS的相关账户赋予相应的权限。