“随机”;“未找到”;Silverlight访问ASP.NET Web服务时出错
我正在用Silverlight 3和ASP.NET Web服务开发一个应用程序,它使用Linq to SQL从我的SQL Server数据库获取数据 当用户导致操作从我的任何web服务方法获取信息时,Silverlight会随机抛出类型为“CommunicationException”的异常“远程服务器返回错误:NotFound”,内部异常状态为“System.Net.WebExceptionStatus.UnknownError” 几乎有10%的请求会出现此错误。如果用户再次尝试获取相同的信息,通常请求没有错误,用户获取数据“随机”;“未找到”;Silverlight访问ASP.NET Web服务时出错,silverlight,web-services,silverlight-3.0,asmx,Silverlight,Web Services,Silverlight 3.0,Asmx,我正在用Silverlight 3和ASP.NET Web服务开发一个应用程序,它使用Linq to SQL从我的SQL Server数据库获取数据 当用户导致操作从我的任何web服务方法获取信息时,Silverlight会随机抛出类型为“CommunicationException”的异常“远程服务器返回错误:NotFound”,内部异常状态为“System.Net.WebExceptionStatus.UnknownError” 几乎有10%的请求会出现此错误。如果用户再次尝试获取相同的信息
在Visual Studio中调试时,只有Silverlight会在异常时停止,我看不到找不到web服务的任何原因。您看到的问题是,每当出现异常时,web服务不会向Silverlight客户端返回有关异常的任何详细信息。它只是返回404NotFound状态作为结果,因此您总是得到异常“NotFound” 您可以尝试做的是确保您的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;}
}
用小提琴来更好地理解我说的话。在每个异常情况下,您都会看到404错误。据我所知,WebClient将所有错误视为“404”。如果可以将代码切换为使用HttpClient,则会出现更多详细错误。如果该代码被隐藏(或生成),那么Fiddler将是您的最佳选择。如果您碰巧正在使用WCF web服务,您可以尝试在web.config文件中打开WCF跟踪:
<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>
我建议您尝试描述导致错误的请求。也许可以用Fiddler之类的工具来观察网络流量。我以前在重新实例化web服务客户机对象(通过控件重载或其他方式)时见过这种情况;在我的应用程序中,这可能是巧合,但经过重构以确保不会出现这种情况,这似乎解决了问题。