C# C2DM尖锐错误:注册无效

C# C2DM尖锐错误:注册无效,c#,android-c2dm,C#,Android C2dm,我使用c2dm sharp向android设备发送推送通知。 我的工作很好,但从一段时间以来,它显示了一些错误:消息失败无效注册 当我调试代码时,我发现在下面方法中C2dmSharp.Server项目的C2dmMessageTransport.cs文件中,它在var webResp=webReq.GetResponse处给出错误作为HttpWebResponse 错误为-基础连接已关闭发送时发生意外错误 我被困在这里,请帮帮我。 我有什么遗漏的吗您是否已注册C2DM服务并输入了您的个人密钥 您收

我使用c2dm sharp向android设备发送推送通知。 我的工作很好,但从一段时间以来,它显示了一些错误:消息失败无效注册

当我调试代码时,我发现在下面方法中C2dmSharp.Server项目的C2dmMessageTransport.cs文件中,它在var webResp=webReq.GetResponse处给出错误作为HttpWebResponse

错误为-基础连接已关闭发送时发生意外错误

我被困在这里,请帮帮我。
我有什么遗漏的吗

您是否已注册C2DM服务并输入了您的个人密钥

您收到的代码记录在此处:

另外,我从这里获得了这两个链接:在“我如何使用它?”?和链接部分

static C2dmMessageTransportResponse send(C2dmMessage msg, string googleLoginAuthorizationToken, string senderID, string applicationID)
{
        C2dmMessageTransportResponse result = new C2dmMessageTransportResponse();
        result.Message = msg;

        var postData = msg.GetPostData();

        var webReq = (HttpWebRequest)WebRequest.Create(C2DM_SEND_URL);
        // webReq.ContentLength = postData.Length;
        webReq.Method = "POST";
        webReq.ContentType = "application/x-www-form-urlencoded";
        webReq.UserAgent = "C2DM-Sharp (version: 1.0)";
        webReq.Headers.Add("Authorization: GoogleLogin auth=" + googleLoginAuthorizationToken);

        using (var webReqStream = new StreamWriter(webReq.GetRequestStream(), Encoding.ASCII))
        {
            var data = msg.GetPostData();
            webReqStream.Write(data);
            webReqStream.Close();
        }

        try
        {
            var webResp = webReq.GetResponse() as HttpWebResponse;

            if (webResp != null)
            {
                result.ResponseStatus = MessageTransportResponseStatus.Ok;

                //Check for an updated auth token and store it here if necessary
                var updateClientAuth = webResp.GetResponseHeader("Update-Client-Auth");
                if (!string.IsNullOrEmpty(updateClientAuth) && C2dmMessageTransport.UpdateGoogleClientAuthToken != null)
                    UpdateGoogleClientAuthToken(updateClientAuth);

                //Get the response body
                var responseBody = "Error=";
                try { responseBody = (new StreamReader(webResp.GetResponseStream())).ReadToEnd(); }
                catch { }

                //Handle the type of error
                if (responseBody.StartsWith("Error="))
                {
                    var wrErr = responseBody.Substring(responseBody.IndexOf("Error=") + 6);
                    switch (wrErr.ToLower().Trim())
                    {
                        case "quotaexceeded":
                            result.ResponseStatus = MessageTransportResponseStatus.QuotaExceeded;
                            break;
                        case "devicequotaexceeded":
                            result.ResponseStatus = MessageTransportResponseStatus.DeviceQuotaExceeded;
                            break;
                        case "invalidregistration":
                            result.ResponseStatus = MessageTransportResponseStatus.InvalidRegistration;
                            break;
                        case "notregistered":
                            result.ResponseStatus = MessageTransportResponseStatus.NotRegistered;
                            break;
                        case "messagetoobig":
                            result.ResponseStatus = MessageTransportResponseStatus.MessageTooBig;
                            break;
                        case "missingcollapsekey":
                            result.ResponseStatus = MessageTransportResponseStatus.MissingCollapseKey;
                            break;
                        default:
                            result.ResponseStatus = MessageTransportResponseStatus.Error;
                            break;
                    }

                    throw new MessageTransportException(wrErr, result);
                }
                else
                {
                    //Get the message ID
                    if (responseBody.StartsWith("id="))
                        result.MessageId = responseBody.Substring(3).Trim();
                }
            }
        }
        catch (WebException webEx)
        {
            var webResp = webEx.Response as HttpWebResponse;

            if (webResp != null)
            {
                if (webResp.StatusCode == HttpStatusCode.Unauthorized)
                {
                    //401 bad auth token
                    result.ResponseCode = MessageTransportResponseCode.InvalidAuthToken;
                    result.ResponseStatus = MessageTransportResponseStatus.Error;
                    throw new InvalidAuthenticationTokenTransportException(result);
                }
                else if (webResp.StatusCode == HttpStatusCode.ServiceUnavailable)
                {
                    //First try grabbing the retry-after header and parsing it.
                    TimeSpan retryAfter = new TimeSpan(0, 0, 120);

                    var wrRetryAfter = webResp.GetResponseHeader("Retry-After");

                    if (!string.IsNullOrEmpty(wrRetryAfter))
                    {
                        DateTime wrRetryAfterDate = DateTime.UtcNow;

                        if (DateTime.TryParse(wrRetryAfter, out wrRetryAfterDate))
                            retryAfter = wrRetryAfterDate - DateTime.UtcNow;
                        else
                        {
                            int wrRetryAfterSeconds = 120;
                            if (int.TryParse(wrRetryAfter, out wrRetryAfterSeconds))
                                retryAfter = new TimeSpan(0, 0, wrRetryAfterSeconds);
                        }
                    }

                    //503 exponential backoff, get retry-after header
                    result.ResponseCode = MessageTransportResponseCode.ServiceUnavailable;
                    result.ResponseStatus = MessageTransportResponseStatus.Error;

                    throw new ServiceUnavailableTransportException(retryAfter, result);
            }
        }
    }

    return result;
}