访问ASP.NET Web服务的Silverlight随机“未找到”错误

访问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服务的原因。

+0

我建议你试试描述导致错误的请求。也许用Fiddler或类似的东西来观察网络流量。 – 2010-03-30 19:35:32

+0

我以前见过这个Web服务客户端对象被重新实例化(通过控制重装或其他);这在我的应用程序中可能是巧合,但重构后确保这种情况没有发生,这似乎解决了这个问题。 – Brandon 2010-03-30 21:59:46

您看到的问题是因为每当发生任何异常时,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服务,您可以尝试打开W​​CF在你的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!