Puis-je réutiliser HttpWebRequest sans vous déconnecter du serveur?

Je suis en train de déboguer un problème spécifique avec mon ASP.NET application. Le client exécute le code suivant:

void uploadFile( string serverUrl, string filePath )
{
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.
        Create( serverUrl );
    CredentialCache cache = new CredentialCache();
    cache.Add( new Uri( serverUrl ), "Basic", new NetworkCredential( "User", "pass" ) );
    request.Credentials = cache;
    request.Method = "POST";
    request.ContentType = "application/octet-stream";
    request.Timeout = 60000;
    request.KeepAlive = true;

    using( BinaryReader reader = new BinaryReader( 
        File.OpenRead( filePath ) ) ) {

        request.ContentLength = reader.BaseStream.Length;
        using( Stream stream = request.GetRequestStream() ) {
            byte[] buffer = new byte[1024];
            while( true ) {
                int bytesRead = reader.Read( buffer, 0, buffer.Length );
                if( bytesRead == 0 ) {
                    break;
                }
                stream.Write( buffer, 0, bytesRead );
            }
        }
    }

     HttpWebResponse result = (HttpWebResponse)request.GetResponse();
     //handle result - not relevant
 }

et Write() déclenche une exception avec "Impossible d'écrire des données sur la connexion de transport: Une connexion établie a été abandonnée par le logiciel sur votre ordinateur hôte." du texte. J'ai utilisé System.Net traçage et a constaté que quelque chose se passe mal lors de l'envoi de la requête avec Content-Length ensemble.

Spécifiquement si je omettre tout ce qui est à l'intérieur de using énoncé dans le code ci-dessus, le serveur répond promptement avec WWW-Authenticate et puis le client reposte la demande avec WWW-Authenticate et tout va bien sauf le fichier dans pas transféré et la demande ne parvient pas beaucoup plus tard.

J'aimerais effectuer les opérations suivantes: envoyer une demande en l'absence de données, d'attendre WWW-Authenticate, puis répétez avec WWW-Authenticate et de données. J'ai donc essayé de modifier le code ci-dessus: d'abord régler tous les paramètres, puis appel GetResponse(), puis de faire de l'envoi, mais lorsque je tente de régler ContentLength bien une exception est levée avec "Cette propriété ne peut pas être défini après l'écriture a commencé" du texte.

Donc HttpWebRequest semble être non-réutilisables.

Comment puis-je réutiliser pour la réexpédition de la demande sans fermer la connexion?

J'ai aussi le même problème. Si vous avez la solution, alors veuillez fournir ou de l'affichage de la modification de la nouveau code , qui va m'aider.
Pas de solution si vous utilisez l'authentification avec le nonce. Si vous utilisez quelque chose comme l'authentification de base, vous pouvez simplement mettre "Autorisation" en-têtes de sorte qu'il n'y a pas WWW-Authenticate phase.
Mais je suis d'erreur à la ligne du ruisseau.Write( buffer, 0, bytesRead )", alors quelle est la solution pour cela. Pouvez vous s'il vous plaît fournir votre code modifié , afin que je puisse mieux comprendre. Merci
C'était il y a si longtemps, je me souviens à peine plus de détails. Je suppose que votre meilleur pari est de poser une question séparée avec tous les détails de votre situation.

OriginalL'auteur sharptooth | 2011-02-08