2016-05-16 10 views
0

Immer wenn ich versuche, eine Benachrichtigung an mehr als 20 Benutzer zu senden, wird ein Fehler ausgegeben Der Remote-Server hat einen Fehler zurückgegeben: (400) Ungültige Anforderung. Ich habe die ganze Lösung versucht, aber es gibt denselben Fehler. Hier ist mein Code: -Lösung Der Remote-Server hat einen Fehler zurückgegeben: (400) Ungültige Anforderung, wenn ContentLength zunimmt

private string SendGCMNotification(string apiKey, string postData) 
    { 
     try 
     { 
      WebRequest wRequest; 
      wRequest = WebRequest.Create("https://gcm-http.googleapis.com/gcm/send"); 
      wRequest.Method = "POST"; 
      wRequest.ContentType = "application/json;charset=UTF-8"; 
      wRequest.Headers.Add(string.Format("Authorization: key={0}", apiKey)); 

      var bytes = Encoding.UTF8.GetBytes(postData); 
      wRequest.ContentLength = bytes.Length; 

      var stream = wRequest.GetRequestStream(); 
      stream.Write(bytes, 0, bytes.Length); 
      stream.Close(); 

      var wResponse = wRequest.GetResponse(); 
      stream = wResponse.GetResponseStream(); 
      var reader = new StreamReader(stream); 
      var response = reader.ReadToEnd(); 

      var httpResponse = (HttpWebResponse)wResponse; 
      var status = httpResponse.StatusCode.ToString(); 

      reader.Close(); 
      stream.Close(); 
      wResponse.Close(); 

      //TODO check status 
     } 
     catch (WebException ex) 
     { 
      Response.Write(ex.Message.ToString()); 
     } 
     return "sent"; 
    } 

Meine web.config-Datei: -

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     </customHeaders> 
    </httpProtocol> 

    <security> 
     <requestFiltering> 
     <requestLimits maxAllowedContentLength="30000000" maxUrl="10000" maxQueryString="10000" /> 
     </requestFiltering> 
    </security> 

    </system.webServer> 

    <system.web.extensions> 
    <scripting> 
     <webServices> 
     <jsonSerialization maxJsonLength="50000000" /> 
     </webServices> 
    </scripting> 
    </system.web.extensions> 
+0

Welches 400 zurückkehrt? Der Google Server? Dann gibt es nichts, was Sie in Ihrer web.config tun können (weil das die Konfiguration für IHREN Server ist), aber Sie müssen google docs über das Format und die Einschränkungen mit den Anfragen an ihre API konsultieren. Vielleicht ist es nicht erlaubt, mehr als 20 Geräte in einem Anruf einzuschließen? – derpirscher

+0

Ich habe die Google [docs] (https://developers.google.com/cloud-messaging/http-server-ref#downstream-http-messages-json) untersucht, es zeigt, dass wir zu einem Zeitpunkt 1000 Geräte hinzufügen können und ich bekomme diesen Fehler bei GetResponse() –

+1

Nun, etwas stimmt nicht mit Ihren Postdaten oder Anfrage. Sonst gäbe es keine 400. – derpirscher

Antwort

0

Das Problem in meinem Postdata war. <div> Tag wird mit Endpunkt in meine Datenbank eingefügt.

Hier ist Code, der Störfaktor

{ "registration_ids": [ "e-9zZTY0LtI:APA91bFTZUYD4kghBu1xU4cO3A9aqzCN_QqX7fZECoQlcGC-PvDg5_fOPMZgNHTBZqk-4jwk6iAfWjJlD6BUu4iGmnXHqjpo-40FR6f4kgjnHGS6TBGOR2Vii7CqxPhvr7OE1RyX8JHy <div style="display:none">viagra.com coupon</div>" ], "data": {"contentTitle":"content title GCM", "message": "some test message"}} 

Durch diese von der Registrierung ID Entfernen mein Problem gelöst

<div style="display:none">viagra.com coupon</div>