我有一个非常奇怪的问题:我正在开发一个带有RIA服务的Silverlight商业应用程序。
我在服务器端有一些DomainServices,其中一个我遇到了问题,有时调用其中一个方法失败(在SL客户端上,我得到"NotFound"异常,请求没有事件到达服务器(我在domainservice的构造函数中放置了一个断点)!
是什么让事情变得更奇怪:
- 如果从SL客户端调用失败,那么我启动Fiddler2,然后第二个(或任何连续的)调用正常工作!如果我关闭fiddler,它又会变得不稳定。
- 如果我重命名我想调用的方法(通过重构),在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(流inputStream)System.ServiceModel.Channels.HttpInput.ParseIncomingMessage (Exception&音箱;requestException)在System.ServiceModel.Channels.HttpChannelListener。HttpContextReceived(HttpRequestContext, Action callback)在System.ServiceModel.Activation.HostedHttpTransportManager。HttpContextReceived (HostedHttpRequestAsyncResult结果)在System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest ()在System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest ()在System.ServiceModel.Activation.HostedHttpRequestAsyncResult。OnBeginRequest(对象状态)在System.ServiceModel.AspNetPartialTrustHelpers。PartialTrustInvoke(ContextCallback回调,对象状态)在System.ServiceModel.Activation.HostedHttpRequestAsyncResult。OnBeginRequestWithFlow(对象状态)在System.Runtime.IOThreadScheduler.ScheduledOverlapped。IOCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* NativeOverlapped)在System.Runtime.Fx.IOCompletionThunk。UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* NativeOverlapped)在System.Threading._IOCompletionCallback。PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
所以由于一些未知的原因,客户端(SL-app)没有正确刷新请求?我开始担心了:(
我的调用者(SL客户端)使用自定义表单身份验证。
我知道你可能会说,让它顺其自然吧,但这让我抓狂,我想知道问题出在哪里,这样我就不会再遇到这种情况了。
谢谢!
再见,Csabi
我怀疑这是URL问题,大多数URL只能是几个kbs长。现在我不知道它的大小,但是在RIA服务中,它使用URL作为querystring发送你的过滤器。
你的方法名也太大了,已经达到URL的最大限制了。当它工作时,即使是大牌,你的过滤器部分可能是空的,但如果你添加更多的过滤器,你将面临错误。