C#MVC4请求失败

时间:2017-06-26 12:12:54

标签: c# asp.net-mvc amazon-web-services asp.net-mvc-4

我在生产中遇到了一些HTTP调用问题。这是场景:

我们有一个桌面应用程序,可通过HTTP请求与Web服务器通信。这在QA中服务器和客户端上的代码模糊下工作正常。现在我们从内部托管的IIS迁移到AWS并将其投入实时(相同的配置,IIS7 / Server 2016,AWS允许所有IP的端口443/80),它现在已经完成了一半。用户可以从客户端应用程序远程登录和进行身份验证,但是某些调用甚至无法到达控制器上的方法(在挂起几秒钟后返回500错误,而在生产中立即执行调用)。我无法理解它,因为我相信它会在QA中完全失败(无论是网络问题还是其他问题),而不是在一个地方而不是在下一个地方工作。

验证数据库连接(能够提取用户帐户/进行身份验证)。所有外部DLL都是最新的(每次推送新版本时都会刻录旧文件以避免停滞),443/80上的已验证连接,同一控制器上的其他方法正常工作,一切都在QA中工作。

[新密码类]

[Serializable]
    public class NewPassword
{
        public int UserID { get; set; }

        public string Password { get; set; }

        public string Location { get; set; }

        public string Username { get; set; }

        public string Name { get; set; }

        public string UserPassword { get; set; }

        public int PasswordID { get; set; }
}

[控制器代码] (控制器路径是/ API /)

[HttpPost] // Does not work with or without HttpPost attribute
[ValidateInput(false)] // disabled for testing, did not help
public JsonResult CSCreate(NewPassword Data)
{

}

[客户代码]

internal static Status CreatePassword(UserAccount Account, Password Credential)
{
    try
    {
        HttpWebRequest Request = (HttpWebRequest)WebRequest.Create("https://" + Methods.Session.Connection.ServerName + "/API/CSCreate");
        Request.ContentType = "application/json";
        Request.Method = "POST";
        using (StreamWriter SW = new StreamWriter(Request.GetRequestStream()))
        {
            NewPassword Data = new NewPassword() { UserID = Account.ID, Password = Credential.Text, Username = Credential.Username, Location = Credential.Location, UserPassword = Account.Password, Name = Credential.Name };
            string JSON = new JavaScriptSerializer().Serialize(Data);
            SW.Write(JSON);
        }
        HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();
        using (StreamReader SR = new StreamReader(Response.GetResponseStream()))
        {
            string Data = SR.ReadToEnd();
            Status EndData = (Status)new JavaScriptSerializer().Deserialize(Data, typeof(Status));
            if (EndData.ExitCode != 200) return new Status() { ExitCode = 400, ExitMessage = EndData.ExitMessage };
            else return new Status() { ExitCode = 200, ExitMessage = EndData.ExitMessage };
        }
    }
    catch (Exception Ex)
    {
        return new Status() { ExitCode = 500, ExitMessage = "Unable to update your account. An error occurred. Please try again later." };
    }
}

有趣的是,即使" POST"在请求信息中指定。尝试使用不允许的PUT或GET方法错误(出于明显原因的GET)(这在给定属性时是有意义的)。我完全不知道这个。

0 个答案:

没有答案