2010-12-03 18 views
1

J'essaye de POST des données à un service Restful et obtenir cette erreur. Toute aide grandement appréciée.Stream.Length throws NotSupportedException

Longueur = 'dataStream.Length' a lancé une exception de type 'System.NotSupportedException'

Position = 'dataStream.Position' a lancé une exception de type 'System.NotSupportedException'

est le code ici

[WebMethod] 
//public static void Main(string output) 
public string webPost() 
{ 
    //HttpWebResponse response = null; 
    string output = null; 

    // Create a request using a URL that can receive a post. 
    WebRequest request = WebRequest.Create("https://subscribers"); 
    request.PreAuthenticate = true; 
    // Set the Method property of the request to POST.   
    request.Credentials = new NetworkCredential("userid", "password"); 
    request.Method = WebRequestMethods.Http.Post; 

    string EmailAddress = "[email protected]"; 
    string FirstName = "first"; 
    string LastName = "Last"; 

    StringBuilder Efulfill = new StringBuilder(); 

    Efulfill.Append("EmailAddress" + HttpUtility.UrlEncode(EmailAddress)); 
    Efulfill.Append("FirstName" + HttpUtility.UrlEncode(FirstName)); 
    Efulfill.Append("LastName" + HttpUtility.UrlEncode(LastName)); 

    byte[] byteData = Encoding.UTF8.GetBytes(Efulfill.ToString()); 

    request.ContentType = "application/xml;charset=ISO-8859-1"; 

    request.ContentLength = byteData.Length; 

    // Get the request stream. 
    Stream dataStream = request.GetRequestStream(); 
    // Write the data to the request stream. 
    dataStream.Write(byteData, 0, byteData.Length); 
    // Close the Stream object. 
    dataStream.Close(); 
    // Get the response. 
    WebResponse response = request.GetResponse(); 
    // Display the status. 
    Console.WriteLine(((HttpWebResponse)response).StatusDescription); 
    // Get the stream containing content returned by the server. 
    dataStream = response.GetResponseStream(); 
    // Open the stream using a StreamReader for easy access. 
    StreamReader reader = new StreamReader(dataStream); 
    // Read the content. 
    string responseFromServer = reader.ReadToEnd(); 
    // Display the content. 
    Console.WriteLine(responseFromServer); 
    // Clean up the streams. 
    reader.Close(); 
    dataStream.Close(); 
    response.Close(); 
    return output; 
} 
+2

Il semble peu probable que le code ci-dessus ait causé cette erreur, car vous n'utilisez pas * Position *. Rappelez-vous, vous n'utilisez pas non plus d'instructions 'using' pour votre WebResponse ou vos flux ... –

+0

J'ai essayé d'utiliser d'abord mais en obtenant la même erreur. Pouvez-vous me dire comment utiliser la position s'il vous plaît? – rasi

Répondre

-5

Vous aurez besoin de lancer votre flux à quelque chose comme un MemoryStream pour que ce soit chercher faisable. La longueur et la position ne sont pas valides sur les flux où CanSeek est faux.

+0

Casting à MemoryStream échouera simplement ... –

+0

Je suis corrigé. Vous pouvez utiliser quelque chose comme dataStream.CopyTo (memStream). – Derek

+0

Pouvez-vous partager le code s'il vous plaît? – rasi

5

en double de ceci: information

réponses Reed Copsey en déclarant «Stream.Length ne fonctionne que sur les implémentations de flux où la recherche est disponible, vous pouvez généralement vérifier si Stream.CanSeek est vrai. »