Question

Je passe des classes définies par l'utilisateur sur des sockets. Le code SendObject est ci-dessous. Il fonctionne sur ma machine locale, mais quand je publierai au serveur web qui communique alors avec le serveur App sur ma propre machine, il échoue.

    public bool SendObject(Object obj, ref string sErrMsg)
    {
        try
        {
            MemoryStream ms = new MemoryStream();
            BinaryFormatter bf1 = new BinaryFormatter();
            bf1.Serialize(ms, obj);
            byte[] byArr = ms.ToArray();
            int len = byArr.Length;
            m_socClient.Send(byArr);
            return true;
        }
        catch (Exception e)
        {
            sErrMsg = "SendObject Error: " + e.Message;
            return false;
        }
    }

Je peux le faire très bien si elle est une classe dans mon projet d'outils et l'autre classe sur UserData ne veut pas seulement savoir. Frustrant!

Ohh. Je pense qu'il est parce que la classe UserData a un DataSet à l'intérieur. Curieusement j'ai vu ce travail, mais après 1 demande, il va Loopy et je ne peux pas le faire fonctionner à nouveau.

Quelqu'un sait pourquoi cela pourrait être? Je l'ai regardé à comparer les dll pour vous assurer qu'ils sont les mêmes sur le serveur web et sur ma machine locale et ils ont l'air d'être si comme je l'ai allumé versioning dans les AssemblyInfo.cs vérifier.

Les causes possibles sont flux non valides ou version d'objet entre le changement sérialisation et désérialisation.


Modifier :

Ok, il semble que le problème est avec la taille. Si je le garde sous 1024 byes (je devine ici), il fonctionne sur le serveur Web et ne pas si elle a un DataSet intérieur it.k En fait, c'est si déconcertant que je converti le DataSet à une chaîne à l'aide ds.GetXml ( ) et cela provoque aussi de faire sauter. :( Il semble donc que quelque chose à travers le réseau avec mes prises ne va pas et ne veut pas lire les données.

Était-ce utile?

La solution

Ceci est résolu par une meilleure question que j'ai posté ici:

Envoi grand sérialisé des objets sur des sockets est un échec que lorsque vous essayez de développer l'octet array, mais ok lorsque vous utilisez un tableau d'octets massif

Il est évident que j'avais un tampon statique que j'avais soulevé de quelques exemples de jouets, et puis quand j'ai commencé à passer des jeux de données de population, ils étaient trop grands. Les réponses à certains problèmes tampons dynamiques que je rencontrais la couverture aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top