none
在本地调试正常的网站发布到Azure之后却出现了部分页面无法显示 RRS feed

  • 问题

  • Hi,

    我用VS2015新建了一个ASP.NET MVC5网站,对它提供的模板进行了修改,增加了部分功能和页面,但是有些诸如Delete,Edit页面没有改动。

    在本地开发调试时没什么问题,所有页面都能正常访问。但当我发布到Azure上时,我新增的页面全部不能访问,模板里未改动的部分却能正常访问。

    我新增的页面的未改动的页面使用了同一个_Layout.cshtml,这个页面上的导航和页脚都是能正常渲染的,但是RenderBody()这个方法在渲染我修改过的页面时却出现错误:

    Error.

    An error occurred while processing your request.

    2016年3月7日 7:32

答案

  • Hi BillGu,

    当部署到Azure上后,我测试得到的json如下:

    您所选择的是国际版的Azure,使用的是国际协调时,我建议您当部署到Azure时修改下你资源的请求方式,确保能够正确的获取到资源,您可以尝试创建Azure Web API 返回测试数据,看是否与其他问题有关系。据我所知Azure中http请求和json序列化不会存在什么问题。

    Best Regards,

    Jambor


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2016年3月14日 9:22
    版主

全部回复

  • Hi,

    我建议您启用Azure网站的诊断以找到详细的问题,关于在 Azure 中启用 Web 应用的诊断日志记录请阅读:https://www.azure.cn/documentation/articles/web-sites-enable-diagnostic-log/。您也可以阅读这篇文章以了解如何使用 Visual Studio对 Azure Web 应用进行故障排除: ttps://www.azure.cn/documentation/articles/web-sites-dotnet-troubleshoot-visual-studio/ 。希望这些能帮助你找到具体的问题。如果您的程序不包含敏感信息的话,你也可以尝试将程序上传然后将链接分享在您后面的回复中,我将尽可能的帮助您找出原因所在。

    Best Regards,

    Jambor


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2016年3月7日 8:02
    版主
  • Hi Jambor

    谢谢你的回复,这是我Azure的网址 http://musicdog.azurewebsites.net/  

    因为不知道怎么验证账户,这个账号不能发图片和超链接。

    2016年3月7日 8:36
  • Hi,

    Azure网站的地址是不足以找出问题的原因的,请参照我之前的回复排除故障,您也可以上传项目然后将链接分享在这,链接以文字的形式也可。

    Best Regards,

    Jambor


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2016年3月7日 8:41
    版主
  • Hi, Jambor

    刚刚尝试了文章中介绍的几种远程调试方法,没有反应,比如在web.config中添加

     <customErrors mode="Off"></customErrors>

    并没有在网页上出现具体的提示;

    也尝试VS附加到Azure上进行调试,VS没有如期地在断点停下来。

    这是我 项目的地址链接 https://github.com/billshooting/MusicDog/

    如果您有空 麻烦帮我看下。

    2016年3月7日 9:53
  • Hi,

    项目中需要注意的一点是,我们将项目部署到Azure应用时一般情况下将无法和本地数据库交互,我建议您使用Azure SQL Database,关于如何将本地数据库移到Azure SQL Database, 请参考这篇文章:https://www.azure.cn/documentation/articles/sql-database-cloud-migrate/

    Best Regards,

    Jambor 


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.



    2016年3月8日 5:24
    版主
  • Hi, Jambor

    经过了这两天的调试,我终于定位到了问题代码段,但是我无法解决它。

    这段代码在我本地调试时是正常的,这段代码也用在了我的一个客户端程序里,也没出问题。

    问题出在下面这段加粗的代码中:如果没有加粗这段代码,即使在Azure中运行也是正常的。

            public async Task<IActionResult> Index()
            {
                SongResponseBandList resSongs1 = new SongResponseBandList();
                await Task.Run(() =>
                {
                    var task1 = HttpReqProxy.GetBandListAsync(5); //内地
                    resSongs1 = task1.GetAwaiter().GetResult();
                    // http请求返回错误
                    if (resSongs1.showapi_res_code == -1)
                    {
                        throw new HttpRequestException(resSongs1.showapi_res_error);
                    }
                });
                SongFileManager.SetSongListByBand(homeSongDb.Band1List, resSongs1.showapi_res_body.pagebean.songlist);
                
                return View(homeSongDb);
            }

    其中GetBandListAsync的代码为:

            public static async Task<SongResponseBandList> GetBandListAsync(int topId)
            {
                //1. Get full request url
                var timeStamp = GetTimeStamp();
                string fullUrl = string.Format("{0}?showapi_appid={1}&showapi_timestamp={2}&topid={3}&showapi_sign={4}"
                    , topListUri, appid, timeStamp, topId, app_sign);
    
                //2. wait http response
                string Json = await GetJsonResponseAsync(fullUrl);
    
                //3. serialize the Json message
                var serializer = new DataContractJsonSerializer(typeof(SongResponseBandList));
                MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(Json));
                try
                {
                    var result = (SongResponseBandList)serializer.ReadObject(stream);
                    return result;
                }
                catch (InvalidCastException ex)
                {
                    throw new Exception("网络请求错误" + ex.Message);
                }
    
            }

    我的猜测是Azure的多线程机制或者Http请求机制和本地不一样??

    2016年3月9日 6:51
  • Hi Bill,

    根据我的测试问题主要是在下面的代码上:

    SongFileManager.SetSongListByBand(homeSongDb.Band1List, resSongs1.showapi_res_body.pagebean.songlist);

    我尝试通过try..catch的方式捕获错误:

    try {
                    SongFileManager.SetSongListByBand(homeSongDb.Band1List, resSongs1.showapi_res_body.pagebean.songlist);
                }
                catch (Exception e)
                {                
                    FileStream stream = new FileStream(@"D:\home\site\approot\src\jambor.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
                    using (StreamWriter write = new StreamWriter(stream))
                    {
                        string content = e.Message;
                        write.Write(content+DateTime.Now.ToString());                }
                 
                }

    当在本地是没有任何问题,当部署到Azure上的时候得到如下的错误:

    我建议您仔细检查异步方法以找出是否有使用上的不当。

    Best Regards,

    Jambor


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.



    2016年3月11日 2:09
    版主
  • Hi Jambor

    我又重新审查了一遍代码,发现了一个在Azure上十分奇怪的情况。

    public async Task<IActionResult> Index()
            {
                SongResponseBandList resSongs1 = new SongResponseBandList();
                await Task.Run(() =>
                {
                    var task1 = HttpReqProxy.GetBandListAsync(5); //内地
                    resSongs1 = task1.GetAwaiter().GetResult();
                    // http请求返回错误
                    if (resSongs1.showapi_res_code == -1)
                    {
                        throw new HttpRequestException(resSongs1.showapi_res_error);
                    }
                });
                SongFileManager.SetSongListByBand(homeSongDb.Band1List, resSongs1.showapi_res_body.pagebean.songlist);
                
                return View(homeSongDb);
            }

    并不是

    SongFileManager.SetSongListByBand(homeSongDb.Band1List, resSongs1.showapi_res_body.pagebean.songlist);

    这个方法有问题,而是在Azure上运行时,resSong1里面根本没有东西。而我在本地运行时,它是正常的。

    resSong1 的结果来自 HttpReqProxy.GetBandListAsync()这个方法,这个方法我之前的回复里贴过代码,是进行异步的http请求,返回Json格式的结果,然后将结果序列化为C#的数据类。

    Azure的http请求或者Json序列化是不是有什么问题?

    2016年3月11日 14:51
  • Hi BillGu,

    当部署到Azure上后,我测试得到的json如下:

    您所选择的是国际版的Azure,使用的是国际协调时,我建议您当部署到Azure时修改下你资源的请求方式,确保能够正确的获取到资源,您可以尝试创建Azure Web API 返回测试数据,看是否与其他问题有关系。据我所知Azure中http请求和json序列化不会存在什么问题。

    Best Regards,

    Jambor


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2016年3月14日 9:22
    版主
  • Hi Jambor,

    It works! 确实是服务器时间导致的http请求的bug。

    感谢您这么长时间耐心地引导和测试,让我学习到了不少知识也意识到了调试水平的差距。

    不过照理说我选的Azure数据地点在东亚,应该是香港的时间才对嘛。结果测试了一下和北京时间差了8个多小时,服务器时间是英国那边时间。Anyway Thanks.

    Best Regards.

    Bill

    2016年3月15日 9:16
  • Hi Bill,

    很高兴您找到了解决方案。Azure所使用的都是国际协调时,即使你选择使用中国版的Azure,您还是要注意这个问题。日后如还遇到关于Azure的问题,欢迎来我们论坛。

    Best Regards,

    Jambor


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2016年3月15日 9:21
    版主