RIA域服务/上下文调用有时会从Silverlight失败

时间:2011-04-25 14:43:23

标签: silverlight wcf ria wcf-ria-services domainservices

我有一个非常奇怪的问题:我正在使用RIA服务开发Silverlight业务应用程序。

我在服务器端有一些DomainServices,其中一个我遇到了问题,有时调用其中一个方法失败(在SL客户端上,我得到了“NotFound”) “异常,并且请求没有事件到达服务器(我将断点放入域服务的构造函数中)!

更让人感到奇怪的是:

  • 如果来自SL客户端的呼叫失败,那么我启动Fiddler2,然后第二个(或任何连续的)呼叫正常工作!如果我关闭提琴手,它会再次变得不稳定。
  • 如果我重命名我想调用的方法(通过重构),也可以在SL客户端的上下文中调用重命名的方法,然后每次拨打电话都成功!

这是我怀疑的方法:

[Invoke]
public void RegisterTrainingProgramCompletion(bool isCompleted, int result, string sportsManNote)
{
 //...
}

如果我将此方法重命名为“RegisterTpCompletion”,那么它的工作原理(令人难以置信)!

DomainService标有一些属性:

[EnableClientAccess()]
[RequiresAuthentication()]
public class NextTrainingProgramDomainService : DomainService

我设法以某种方式记录服务器端,并从WCF堆栈中获得以下异常:

从网络收到的XML存在问题。有关详细信息,请参阅内部异常在System.ServiceModel.Channels.HttpInput.DecodeBufferedMessage(ArraySegment`1 buffer,Stream inputStream)    在System.ServiceModel.Channels.HttpInput.ReadBufferedMessage(Stream inputStream)    在System.ServiceModel.Channels.HttpInput.ParseIncomingMessage(Exception& amp; requestException)    在System.ServiceModel.Channels.HttpChannelListener.HttpContextReceived(HttpRequestContext context,Action callback)    在System.ServiceModel.Activation.HostedHttpTransportManager.HttpContextReceived(HostedHttpRequestAsyncResult结果)    在System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest()    在System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest()    at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequest(Object state)    在System.ServiceModel.AspNetPartialTrustHelpers.PartialTrustInvoke(ContextCallback回调,对象状态)    at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequestWithFlow(Object state)    在System.Runtime.IOThreadScheduler.ScheduledOverlapped.IOCallback(UInt32 errorCode,UInt32 numBytes,NativeOverlapped * nativeOverlapped)    在System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32错误,UInt32 bytesRead,NativeOverlapped * nativeOverlapped)    在System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode,UInt32 numBytes,NativeOverlapped * pOVERLAP)

因为某些未知原因,clint(SL-app)没有正确刷新请求?我开始担心:((

我的呼叫者(SL客户端)使用自定义表单身份验证进行身份验证。

我知道你可以说,然后保持现状,但这让我发疯,我想知道问题是什么,所以我不会再遇到它。

谢谢!

再见 Csabi

1 个答案:

答案 0 :(得分:0)

我怀疑它是URL问题,大多数URL只能是几kbs长。现在我不知道大小,但在RIA服务中,它使用URL将您的过滤器作为查询字符串发送。

您的方法名称也很大,达到了URL的最大限制。当它使用大名称工作时,您的过滤器部分可能是空的,但如果添加更多过滤器,您将面临错误。