2010-02-27 5 views
3

J'ai une application .NET qui utilise Remoting entre une console d'administration et une application serveur.ArgumentNullException pendant l'application distante

Lors d'un appel à distance particulièrement long, j'obtiens un message d'erreur, affiché ci-dessous.

J'ai ajouté le Sponsor au client pour empêcher la fermeture de la connexion Remoting, et j'ai vérifié que la méthode Renew() est appelée. J'ai recherché l'erreur sur googled, mais rien ne se présente. Je ne suis pas vraiment sûr de ce qui se passe ici, donc toute aide est appréciée.

Value cannot be null. Parameter name: returnHeaders

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentNullException: Value cannot be null.

Parameter name: returnHeaders

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[ArgumentNullException: Value cannot be null.

Parameter name: returnHeaders]

System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +7596735

Répondre

3

Eh bien, avoir un regard sur la Shared Source trouvé sur syncfusion.com, et vérifier les SecurityPermissions attribut here, et je peux deviner que ce soit BinaryFormatter (vous ne dites pas qui?) N'a pas désérialiser l'objet Dans la question. Comme vous avez mentionné que c'est particulièrement long, il vaut peut-être la peine d'encapsuler l'appel à distance dans un bloc try/catch et de placer une pile complète pour voir exactement où elle échoue ... encore mieux , si InnerException n'est pas null, incluez-le .... Ou faites quelque chose comme ça ... Ok, cela peut sembler hackish ... et peut échouer ...

Du côté serveur, créez une méthode fictive ... par exemple

 
void FuBar(void){ 
    int foo = 3, bar = 4, baz = 0; 
    baz = foo + bar; 
} 

Lorsque vous appelez la procédure longue, lancez un thread en arrière-plan pour appeler de façon répétée le FuBar méthode pour faire en sorte que le serveur d'accès distant n'expire pas et quand l'appel est terminé, tuer le fil ...

Je pense, est que, après une période de temps, l'appel échoue Remoting, malgré le renouvellement du commanditaire ..

Ou peut-être le socket est-il temporisé? Je suis à court d'idées ...

Espérons que cela aide, Cordialement, Tom.