Tag: azure

有没有办法从预先编写的C#Azure Functions自动生成Swagger标签?

是否有人知道任何.NET属性可用于注释预编译的C#Azure函数,以便它可以自动生成Swagger标记? 例如,我想在Swagger中自动生成“tags”条目: /api/v1/revision: get: operationId: /api/v1/revision/get tags: – System produces: [] consumes: [] parameters: [] description: Gets the API version responses: ‘200’: description: Success operation security: – apikeyQuery: [] 这是我的C#函数: public static class VersioningService { [FunctionName(“ApiVersion”)] public static async Task ApiVersion([HttpTrigger(AuthorizationLevel.Function, “get”, Route = “v1/revision”)]HttpRequestMessage req, TraceWriter log) { return req.CreateResponse(HttpStatusCode.OK, “API Version: 1.0340”); } […]

Azure Fluent API – AppServicePlanOperations.ListMetricsWithHttpMessagesAsync返回InternalServerError

可以在此处找到此方法的文档 这是我的代码: var appServiceManager = AppServiceManager.Authenticate(credentials, subscriptionId); var filter = “(name.value eq ‘CpuPercentage’) and startTime eq ‘2017-10-06T08:00:00Z’ and endTime eq ‘2017-10-06T09:00:00Z’ and timeGrain eq duration’PT1H'”; var metrics = appServiceManager.AppServicePlans.Inner.ListMetricsWithHttpMessagesAsync(“myResourceGroupName”, “myAppServicePlanName”, false, filter).Result; 这是我得到的唯一详细例外: 发生了一个或多个错误。 (操作返回无效的状态代码’InternalServerError’)—> Microsoft.Rest.Azure.CloudException:操作返回无效的状态代码’InternalServerError’ 文档说过filter是可选的,它不是(如果我传入null我得到一个BadRequest)。 我现在提供一个,现在它抛出内部服务器错误。 我已经在azure-sdk-for-net回购中打开了一个问题,但是我希望其他人可以看到我在我的filter字符串中是否犯了任何错误。

请求在Azure AppService中排队,尽管它在线程池中有足够的线程

我使用asp.net webapi编写了一个api,并将其部署在azure中作为Appservice。 我的控制器的名称是TestController,我的动作方法类似于波纹管。 [Route(“Test/Get”)] public string Get() { Thread.Sleep(10000); return “value”; } 因此,对于每个请求,它应该在返回字符串“value”之前等待10秒。 我还编写了另一个端点来查看threadpool中用于执行请求的线程数。 这个动作就像吼叫一样。 [Route(“Test/ThreadInfo”)] public ThreadPoolInfo Get() { int availableWorker, availableIO; int maxWorker, maxIO; ThreadPool.GetAvailableThreads(out availableWorker, out availableIO); ThreadPool.GetMaxThreads(out maxWorker, out maxIO); return new ThreadPoolInfo { AvailableWorkerThreads = availableWorker, MaxWorkerThreads = maxWorker, OccupiedThreads = maxWorker – availableWorker }; } 现在,当我们同时向Test / Get端点发出29次调用时,所有请求都需要大约11秒才能成功。 因此服务器在11个线程中同时执行所有请求。 […]

CloudBlockBlob.DownloadToStream与DownloadRangeToStream

尝试使用ASP.NET azure SDK从blob存储中下载图像。 我在另一篇文章中读到,DownloadToStream确实将blob打破成小块并并行下载它们以提高性能。 我相信这就是DownloadRangeToStream的用途。 我无法找到任何关于DownloadToStream的文档或代码确认,并且持怀疑态度,因为它具有与blob url直接下载相同的运行时(每次下载.5-3s)。 这是我的下载方法的代码,给出了相同的性能。 使用CloudBlockBlob.DownloadToStream: private Bitmap DownloadFromBlob(String set) { CloudStorageAccount storageAccount = CloudStorageAccount.Parse( CloudConfigurationManager.GetSetting(“StorageConnectionString”)); CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); CloudBlobContainer container = blobClient.GetContainerReference(“templates”); CloudBlockBlob blockBlob = container.GetBlockBlobReference(set + “.png”); using (var memoryStream = new MemoryStream()) { blockBlob.DownloadToStream(memoryStream); return (memoryStream == null) ? null : (Bitmap)Image.FromStream(memoryStream); } } 使用Image.FromStream: private Bitmap DownloadImageFromUrl(string […]

部署到多个Azure环境(开发,测试,生产)的推荐方法是什么?

我有一个使用mvc5的C#Web应用程序。 它目前在Azure上运行,我有一个开发,测试和生产实例。 我需要做什么来确保数据库连接字符串在应用程序被推送到每个环境时自动更改? 我知道这可以通过web.config实现,因为您可以定义Web.Debug.Config等,但是我如何针对Azure上的不同工作者角色进行此操作? 我一直在互联网上寻找解决方案。 简而言之,我想对多个web.config文件使用相同的方法,但是对于Azure。 作为一些额外的背景,对于我的解决方案,我将我的存储库库分解为一个单独的项目,并且我试图从配置文件中获取连接字符串(假设domain.dll是包含它的库的名称)。 首先,当我只使用web.config但当我不得不从另一个辅助角色运行我的域DLL文件时,配置开始返回null; 因为从其他工作进程(非Web)运行时,此代码不会运行。 这似乎引入了一个有趣的问题,如果我需要在Web之外和Azure之外使用domain.dll代码怎么办? 如何仍然保持Azure和web.config提供的连接字符串优势?

防止在.NET Azure Web Api中使用PATCH覆盖某些字段

我正在创建一个带有.NET后端的Azure移动服务,它使用TableController(ApiController的子类)来处理REST请求。 在我的PATCH方法中,我想限制允许更新的字段集。 我有一个AccountController,我不希望覆盖Username和UserId字段。 public class AccountController : TableController { … // PATCH tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959 public Task PatchAccount(string id, Delta patch) { return UpdateAsync(id, patch); } … } 我想发回一个有意义的HTTP响应,如403: Forbidden或类似的,如果连接到API的客户端试图更新用户名或userId。 所以我需要一些方法来了解Delta补丁的内容或在更新’禁用’字段时有自动响应。

502在azure’网站’内请求付款服务

我通过拨打外部支付服务收到此错误。 只有在部署到azure并且在本地完美运行时才会出现该错误。 “Web服务器在充当网关或代理服务器时收到无效响应。您正在查找的页面存在问题,无法显示。当Web服务器(充当网关或代理)联系上游时内容服务器,它收到内容服务器的无效响应。“ 使用此wdsl生成支付服务类 https://pal-test.adyen.com/pal/Payment.wsdl 似乎错误发生在Payment类的authorize方法中,但即使所有日志记录选项都打开,我也无法记录任何有用的内容。 有没有其他人有这个问题? UPDATE 我把问题缩小了一点。 下面控制器的测试方法将导致azure网站崩溃502并重新启动。 public class TestController : Controller { public string test() { try { var webClient = new WebClient(); var stream = webClient.OpenRead(“https://pal-test.adyen.com/pal/servlet/soap/Payment”); var streamReader = new StreamReader(stream); return streamReader.ReadToEnd(); } catch (Exception exp) { errorResult(exp); } return formattedResult(result); } } MS似乎已经删除了azure网站的一些HTTP协议。 特别是这被阻止似乎是SEC_I_RENEGOTIATE。 有什么工作吗? 有谁知道这种方法是否适用于Web角色?

如何在ASP.NET中开发的Azure Web App上获取客户端的IP地址?

我开发了一个在Azure上部署为Web应用程序的Web应用程序。 我需要获取客户端的IP地址,以便我可以使用GeoIP API来获取客户端所连接的国家/地区。 所以这是我的问题,如何在发送查看主页的请求时获取客户端的IP地址? 我正在使用ASP.NET MVC。

ConnectionString属性尚未在update-database上初始化

在包管理器控制台中,我在azure上对我的数据库运行命令更新数据库,但是我收到错误,说ConnectionString属性尚未初始化。 我对本地数据库做了同样的事情,一切都很顺利。 在我的web配置中,我已经将连接字符串更改为mach我的azure数据库,这是我的数据库上下文的样子: public class MadLabsDatabaseContext : IdentityDbContext { public MadLabsDatabaseContext() : base(“DefaultConnection”) { Configuration.LazyLoadingEnabled = true; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity() .ToTable(“AspNetUsers”); modelBuilder.Entity() .ToTable(“AspNetUsers”); } } 这是web.config中的连接字符串: 这是我的Package Manager控制台代码: Update-database -ConnectionString “Data Source=tcp:serverName.database.windows.net,1433;Database=madLabs_db;User ID=userName;Password=password;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True;” -ConnectionProviderName “System.Data.SqlClient” 为什么我收到此错误?

Azure服务总线读取性能

我正在尝试使用Azure Service Bus提高Windows服务的吞吐量。 我注意到的是,如果我有像这样的代码。 client.OnMessageAsync(async message => { var timer = new Stopwatch(); timer.Start(); bool shouldAbandon = false; try { // asynchronouse processing of messages await messageProcessor.ProcessAsync(message); Interlocked.Increment(ref SimpleCounter); // complete if successful processing await message.CompleteAsync(); } catch (Exception ex) { shouldAbandon = true; Console.WriteLine(ex); } if (shouldAbandon) { await message.AbandonAsync(); } timer.Stop(); messageTimes.Add(timer.ElapsedMilliseconds); }, […]