访问ASP.NET Web服务的Silverlight随机“未找到”错误
我正在开发一个Silverlight 3和ASP.NET Web服务的应用程序,它使用Linq to SQL从我的SQL Server数据库获取数据。访问ASP.NET Web服务的Silverlight随机“未找到”错误
当用户导致某个操作从我的任何Web服务方法获取信息时,Silverlight会抛出类型为“CommunicationException”的异常“远程服务器返回错误:NotFound。”,并且InnerException状态为“ System.Net.WebExceptionStatus.UnknownError”。
差不多有10%的请求出现此错误。如果用户试图再次获取相同的信息,通常请求没有错误,并且用户获取数据。
在Visual Studio中进行调试时,只有Silverlight停止了该异常,并且我看不到找不到Web服务的原因。
您看到的问题是因为每当发生任何异常时,Web服务都不会返回有关Silverlight客户端异常的任何详细信息。它只是返回一个404未找到的状态作为结果,因此你总是得到异常“未找到”。
您可以尝试做的事情是确保您的Web服务在异常情况下返回200(有效结果),并以某种方式返回错误消息以及对象。
例如:
public class WebServiceResult
{
//your object's properties go here
//extra properties to check if exception has occured
public string ErrorMessage {get; set;}
public bool IsError {get; set;}
}
使用Fiddler,试图更好地理解我在说什么。如果发生任何异常,您将看到404错误。
据我所知,WebClient将所有错误视为“404”。如果您可以将代码切换为使用HttpClient,您将得到更详细的错误。如果该代码被埋没(或生成),那么提琴手将是你最好的选择。
,如果你碰巧使用WCF Web服务,您可以尝试打开WCF在你的web.config文件跟踪:
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\CodePlex.Diagnostics\CodePlex.Diagnostics.Services.Web.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
有关内容和细节:READ ME!
我建议你试试描述导致错误的请求。也许用Fiddler或类似的东西来观察网络流量。 – 2010-03-30 19:35:32
我以前见过这个Web服务客户端对象被重新实例化(通过控制重装或其他);这在我的应用程序中可能是巧合,但重构后确保这种情况没有发生,这似乎解决了这个问题。 – Brandon 2010-03-30 21:59:46