小编Dav*_*New的帖子

Azure云服务Web角色网页无法加载

这很可能是一个非常长的帖子,试图完全解释我的Azure云服务的部署方式以及我已经尝试解决这个问题,所以请提前道歉并表示感谢.

Framwork:4.5.1
Azure SDK:2.5
Visual Studio:2013 Update 4

问题:

在我尝试加载网页时发布我的Azure Cloud Service时,浏览器将持续加载,从不显示页面或任何错误(没有Web错误代码或.Net错误).无论我是在远程IP还是从-cloudservicename-.cloudapp.net远程登录到Azure本身的VM之后尝试加载网站,这都是相同的行为.部署到Azure时,发布和调试配置都是这种情况.

但是,当在Azure模拟器上本地运行时,应用程序在调试和发布模式下都能正常运行.我的云和本地.cscfg文件之间没有区别,除了VPN配置的NetworkConfiguration部分.

Cloud Service从Visual Studio部署没有错误,我可以RDP到VM并打开IIS等没问题,网站配置和证书看起来很好.

我的应用程序

我的Azure云服务由两个角色组成,一个是托管网站的Web角色,另一个是运行各种后台作业的Worker角色.

这个项目已经有一段时间了,我过去已经从不同的机器上发布了几次迭代.这是我第一次从新的Windows 8.1笔记本电脑上发布,虽然这不应该有所作为.自上一版本以来,配置发生了很小的变化(一个连接字符串添加到角色中).唯一重大的变化是我升级到VS2013更新4(来自更新3)和Azure SDK 2.5(来自2.4).

如果需要,我可以发布配置文件,但是在部署确实有效的情况下,一切似乎都可以.

调查:

我已经采取了许多步骤来尝试调查并解决问题.

RDP到服务器上没有显示任何移民问题,事件日志中没有IIS条目,我自己的日志记录似乎没有任何有用的东西(稍后将详细介绍).

我还启用了Azure诊断程序,但查看返回的日志,没有任何内容突然出现在我身上,因为它是手头问题的日志.

我尝试的下一件事是将远程调试器附加到Azure VM,这可以工作,我可以调试项目.我在Global.asax.vb中处理的所有方法上都设置了断点,包括:

Application_BeginRequest
Application_AuthenticateRequest
Application_Error
Run Code Online (Sandbox Code Playgroud)

在请求页面Application_BeginRequest被立即命中,然后按Application_AuthenticateRequest预期命中.然而,遵循代码通过Application_AuthenticateRequest导致一些奇怪的行为.

在这段代码中我验证了一个FormsAuthenticationCookie,如果发现它将被设置HttpContext.Current.UserThread.CurrentPrincipal.在这种情况下,cookie没有任何用户没有登录,这意味着该Application_AuthenticateRequest方法完成.此时我可以继续逐步完成.Net框架代码并可以看到成功完成HttpApplication.ExecuteStep.

此时,我希望master_Page_PreLoadMasterPage或我的自定义实现中的方法或其他一个预加载事件Page可以执行,但是没有一个被命中.

在调试中离开进程几分钟后最终Application_Error被命中,这意味着我的日志记录会写出显然导致错误的异常.这很少发生,但是当它发生时我发现了两个不同的错误:


我的日志中的第一个错误:

ErrorCode:SubStatus:暂时失败.请稍后重试.(一个或多个指定的缓存服务器不可用,这可能是由繁忙的网络或服务器引起的.对于内部部署缓存集群,还要验证以下条件.确保已为此客户端帐户授予安全权限,并检查AppFabric允许缓存服务通过所有缓存主机上的防火墙.服务器上的MaxBufferSize也必须大于或等于从客户端发送的序列化对象大小.).附加信息:客户端尝试与服务器通信:net.tcp:// rolename.here:24233 .. GUID:9f85d178-968f-4908-bec4-d1a5f57bb819

在Microsoft.ApplicationServer.Caching.DataCache.ThrowException(ErrStatus errStatus,的Guid trackingId,异常responseException,字节[] []的有效载荷,的EndpointId目的地)在Microsoft.ApplicationServer.Caching.DataCacheFactory.EstablishConnection(IEnumerable'1服务器,RequestBody请求,Func键'3 sendMessageDelegate,DataCacheReadyRetryPolicy retryPolicy)位于Microsoft.Web.DistributedCache的Microsoft.ApplicationServer.Caching.DataCacheFactory.GetCache(String cacheName,CreateNewCacheDelegate cacheCreationDelegate,DataCacheInitializationViaCopyDelegate initializeDelegate)的Microsoft.ApplicationServer.Caching.SocketClientProtocol.Initialize(IEnumerable'1服务器). Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider.CreateInternalProvider(IHttpRuntime httpRuntime,OutputCacheI)中的CacheHelpers.RunCacheCreationHooks(CacheConnectingEventArgs fetchingEventArgs,IDataCacheFactory dataCacheFactory,Object sender,EventHandler'1 fetchingHandler,EventHandler'1 fetchedHandler)nitializationData initData,IDataCacheFactory …

asp.net deployment iis azure azure-cloud-services

2
推荐指数
1
解决办法
1277
查看次数

公开API端点的JSON Schema?

在哪里以及如何公开API端点的架构是否有标准?

例如,假设以下API端点可用:

api/companies/

api/companies/{id}/employees/
Run Code Online (Sandbox Code Playgroud)

应该在哪里公开公司和员工资源的架构?

api/company-schema.jsonapi/employee-schema.json

api/schemas/company.jsonapi/schemas/employee.json

rest jsonschema json-api

2
推荐指数
1
解决办法
1037
查看次数

VSTS:在构建步骤中使用$(BuildID)作为参数

我想提供构建ID作为我的构建中的某些脚本的参数:

BuildID

但这并没有解析构建的ID.相反,它是按字面意思使用的.见输出:

dotnet publish -c Release -o C:\agent\_work\50\a\MyProject.Api --version-suffix $(BuildID)
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

tfs azure-devops azure-pipelines-build-task azure-pipelines

2
推荐指数
1
解决办法
1499
查看次数

通过 MVC 禁用类似跟踪的 INFO 日志记录

在为 ASP.NET Core MVC 应用程序启用应用程序日志记录时,我发现每个向 API 发出的请求都记录了许多低级详细信息(请参见下面的示例)。

我发现这会用类似跟踪的细节污染应用程序日志(特别是因为我们每分钟收到数百个请求),使其变得非常难以处理。

有什么办法可以禁用它吗?或者也许我应该寻找另一种日志记录方法?

API 请求的示例 INFO 日志

2017-03-14 09:23:46.944 +00:00 [信息] 请求启动 HTTP/1.1 GET http://example.net/api/something application/json

2017-03-14 09:23:46.944 +00:00 [信息] 成功验证令牌。

2017-03-14 09:23:46.944 +00:00 [信息] HttpContext.User 通过来自 authenticationScheme 的 AutomaticAuthentication 合并:“Bearer”。

2017-03-14 09:23:46.944 +00:00 [Information] AuthenticationScheme:“Bearer”已成功通过身份验证。

2017-03-14 09:23:46.944 +00:00 [信息] 用户授权成功:空。

2017-03-14 09:23:46.944 +00:00 [信息] 执行带有参数的操作方法“Xyz.GetAsync (Xyz.Api)” (["Xyz.Something", "", "", "", " ", "0", "100", "", "2017-06-01T00:00:00Z", "False"]) - ModelState 有效

2017-03-14 09:23:47.115 +00:00 [信息] 执行 JsonResult,写入值“Xyz.Resources.SomeModel[]”。

2017-03-14 09:23:47.115 +00:00 [信息] 在 206.5169 毫秒内执行操作“Xyz.GetAsync …

asp.net-core-mvc asp.net-core asp.net-core-webapi

2
推荐指数
1
解决办法
1598
查看次数

Azure App Service上的服务器垃圾收集

是否可以在Azure App Service上使用服务器垃圾收集

gcServerweb.config(D:\ home\site\wwwroot\web.config)中设置如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <gcServer enabled="true" />
  </runtime>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath=".\MyApplication.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
  </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

GCSettings.IsServerGC仍然返回错误.

.net c# garbage-collection azure-web-sites azure-app-service-plans

2
推荐指数
1
解决办法
1675
查看次数

在 Azure Kubernetes 服务中禁用 Azure Active Directory RBAC

是否可以在 Azure Kubernetes 服务中暂时禁用 Azure Active Directory RBAC?我问的原因是因为我们无法设置自动化任务(如持续集成),因为对 kubectl 进行身份验证现在需要人工干预来完成设备代码身份验证 - 我在这里另一篇关于此的帖子。也许即使只是禁用 Kubernetes RBAC 也能绕过 AD 身份验证的需要?我会做,直到一个解决方案的问题是可用的。

azure azure-active-directory azure-aks

2
推荐指数
1
解决办法
1053
查看次数

从数据查询将日期设置为局部变量 - “未找到表格表达式语句”

我无法将查询中的标量日期值设置为局部变量。我收到以下错误:

SYNTAX ERROR

No tabular expression statement found
Run Code Online (Sandbox Code Playgroud)

询问:

let startTime = toscalar(customMetrics
| where timestamp > ago(1d)
| summarize min(timestamp));
Run Code Online (Sandbox Code Playgroud)

仅运行查询时我得到的结果很好:

日志分析结果

我究竟做错了什么?

azure-application-insights azure-log-analytics

2
推荐指数
1
解决办法
1054
查看次数

为什么这是错的?(C#Task ContinueWith)

当我写下面的代码时:

 Task<string> task = Task.Factory.StartNew<string>(() => "first task")
         .ContinueWith(t =>
                 {
                     Console.WriteLine(t.Result);
                     Console.WriteLine("second task");
                 });
Run Code Online (Sandbox Code Playgroud)

那是错的!

然后我把它改成这个:

 var  task = Task.Factory.StartNew<string>(() => "first task")
         .ContinueWith(t =>
                 {
                     Console.WriteLine(t.Result);
                     Console.WriteLine("second task");
                 });
Run Code Online (Sandbox Code Playgroud)

一切都好!

为什么?

"任务任务"和"var任务"之间有什么不同?

c# multithreading task

1
推荐指数
1
解决办法
1079
查看次数

取消任务队列中正在执行的任务

我有一个需要按顺序处理的项目列表(但在单独的工作线程上以保持 UI 响应能力)。需要注意的重要一点是,这些项目可以运行很长时间(5 - 10 秒)。

Task<bool> currentTask = null;

foreach (var item in items)
{
    var currentItem = item;

    // Add a new task to the sequential task queue
    if (currentTask == null)
        currentTask = Task.Factory.StartNew<bool>(() => 
        { 
            return currentItem.ProcessItem(); 
        }, processCancelTokenSource.Token);
    else
        currentTask = currentTask.ContinueWith<bool>(t => 
        { 
            return currentItem.ProcessItem(); 
        }, processCancelTokenSource.Token);

    // Update UI after each task completes
    currentTask.ContinueWith(t =>
    {
        if (t.IsCanceled)
            currentItem.State = State.Cancelled;
        else
        {
            if (t.Result)
                currentItem.State = State.Complete;
            else
                currentItem.State = State.Failed;
        } …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading asynchronous task-parallel-library

1
推荐指数
1
解决办法
2314
查看次数

使用while(true)定期执行任务

我需要不断轮询数据存储以获取可能的更新.我使用以下代码实现此目的.顺便说一下,这是一个Windows窗体应用程序.

var uiContext = TaskScheduler.FromCurrentSynchronizationContext();

var updateTask = Task.Factory.StartNew(() =>
{
    while (true)
    {
        Thread.Sleep(5000);

        Task.Factory.StartNew(() =>
        {
            someData = dataStore.GetData();
        }).ContinueWith(t =>
        {
            someGrid.DataSource = someData;
        }, uiContext);
    }
});
Run Code Online (Sandbox Code Playgroud)

someData是一个私有类字段,someGrid是一个数据网格控件.

这看起来很完美,但我想知道是否有更好的方法来实现它.另外,我的外部任务应该是LongRunning吗?

编辑:

好的,根据Jon和Henk的建议,我使用的是Timer:

uiContext = TaskScheduler.FromCurrentSynchronizationContext();

updateTimer = new System.Timers.Timer(5000);
updateTimer.Elapsed += updateTimer_Elapsed;
updateTimer.Enabled = true;
Run Code Online (Sandbox Code Playgroud)

已逝去的事件:

void updateTimer_Elapsed(object sender, ElapsedEventArgs e)
{
    someData = dataStore.GetData();

    Task.Factory.StartNew(() =>
    {
        someGrid.DataSource = someData;
    }, uiContext);
}
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading winforms task-parallel-library

1
推荐指数
1
解决办法
1626
查看次数