小编Tho*_*dal的帖子

elmah是否也处理被捕异常

ELMAH是否记录了异常,即使它们没有冒泡到应用程序?我想在发生异常时弹出消息并仍然记录异常.目前我已经把所有东西都放在try catch块中并且吐出消息,但这变得乏味.

.net asp.net elmah exception-handling

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

避免app.config中configSection中的特定于版本的信息

我已经为app.config文件中的某些设置管理了一个小GUI.GUI作为我的产品的一部分发布,可以更改app.config文件中的值,而无需在文本编辑器中打开它.

这些属性在自定义configSection中实现,使其在代码中强类型化.我的问题是,当app.config文件更新时(当我从GUI保存时),我的程序集的完全限定名称写在configSection中,如下所示:

<section name="ConfigurationSettings" type="PerformanceDude.MSBuildShellExtension.Common.ConfigurationSettings, Common, Version=2.2.1.0, Culture=neutral, PublicKeyToken=1ab1b15115e63xxx" />
Run Code Online (Sandbox Code Playgroud)

当我将此程序集升级到新版本号时,GUI代码程序集版本不再与app.config中的程序集引用相匹配.

这是我加载设置的方式:

var config = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap() { ExeConfigFilename = ConfigFilePath }, ConfigurationUserLevel.None);
var settings = Config.GetSection("ConfigurationSettings") as ConfigurationSettings;
Run Code Online (Sandbox Code Playgroud)

这是我保存设置的方式:

config.Save(ConfigurationSaveMode.Minimal, true);
Run Code Online (Sandbox Code Playgroud)

每次更新时我都不想编写更新版本的升级脚本.有谁知道这个问题的一个很好的解决方案?

.net c# configuration app-config config

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

Azure功能部门对存储帐户的使用成本很高

我在消费计划上运行一个Azure功能.我已经选择了无服务器功能的消费计划以及最小化成本.该函数使用来自服务总线主题的消息,并将一些输出写入blob存储.

保持功能运行最近30天大约是10美元.这是非常可以接受的,因为该函数有很多消息要消耗.将输出写入blob存储大约是20美元.也可以接受.我不明白的是,功能的底层存储帐户的费用在同一时期约为70美元.消耗主要是命中文件写操作单元文件协议操作单元.存储帐户创建为本地冗余通用v1.

有谁能解释这里发生了什么?查看存储帐户时,会有一些blob.我认为问题在于表存储.检查存储帐户时,有如下表格:

$MetricsCapacityBlob $MetricsHourPrimaryTransactionBlob AzureWebJobsHostLogs201804

通过删除AzureWebJobsDashboard应用程序设置,我已禁用我的功能中的日志记录.执行此操作后,AzureWebJobsHostLogs*表似乎不再接收新行.但$ Metrics*表仍然会收到新数据.如果对这些表的写入导致我在Portal中的Costs Management视图中看到的所有文件写入活动,我都不知道.

这里发生了什么?是否真的需要从无服务器代码维护这些表,并且表访问的价格是函数本身价格的x7听起来是否正常?

azure azure-functions

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

在ASP.NET Core的stacktrace中包含文件名和行号

在.NET完整框架中,可以在发布版本生成的堆栈跟踪中包含文件名和行号,方法是在输出中包含调试信息并将调试信息设置为pdb-onlyfull.在ASP.NET Core和Azure Function Apps中工作时,如果将生成的XML添加到项目文件中,这些选项似乎不再可以通过UI访问或工作.当我创建一个新项目并在发布模式下运行它时,文件名和行号不是堆栈跟踪的一部分.

如何在ASP.NET Core中的发布版本中包含文件名和行号?

更新:重新创建的步骤!

添加新的异常记录中间件:

app.Use(async (context, next) =>
{
    try
    {
        await next.Invoke();
    }
    catch (Exception e)
    {
        Console.WriteLine(e.ToString());
    }
});
Run Code Online (Sandbox Code Playgroud)

在生成的默认值中抛出异常ValuesController:

[HttpGet]
public IEnumerable<string> Get()
{
    throw new Exception();
}
Run Code Online (Sandbox Code Playgroud)

构建项目(调试/发布无关紧要).使用exe文件运行应用程序并点击/ api/values.Stacktrace不包含文件名和行号:

System.Exception: Exception of type 'System.Exception' was thrown.
   at WebApplication50.Controllers.ValuesController.Get()
   at lambda_method(Closure , Object , Object[] )
   at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeActionMethodAsync>d__12.MoveNext()
Run Code Online (Sandbox Code Playgroud)

(我不希望这变成一个优点/缺点.我知道有些人认为包含这些信息是死亡罪,有些人不这样做:)

csproj visual-studio .net-core asp.net-core azure-functions

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

ServiceBusTrigger中有时不提供连接字符串

我有一个带有服务总线触发器的Azure功能:

public static async Task Run([ServiceBusTrigger(
    "%inputTopicName%",
    "%subscriptionName%",
    AccessRights.Manage,
    Connection = "connection")]string mySbMsg)
Run Code Online (Sandbox Code Playgroud)

在99.9%的调用中,触发器成功解析为Azure Service Bus上的订阅.但有时,我在日志中看到以下错误:

Microsoft.Azure.WebJobs.Host.FunctionInvocationException: Exception while executing function: UptimeChecker ---> System.ArgumentException: The argument connectionString is null or white space.
Parameter name: connectionString
   at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.FunctionInvocationFilterInvoker.d__9.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.d__24.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.d__23.MoveNext()
--- …
Run Code Online (Sandbox Code Playgroud)

c# azureservicebus azure-functions

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

无法在 C# 中发送电子邮件 安全性较低的应用程序访问不再可用

我有一个 winform 应用程序在我们的生产车间运行,它发送电子邮件进行报告,所以从昨天开始它无法发送电子邮件,我收到了这条消息

\n

“SMTP 服务器需要安全连接,或者客户端未经过身份验证。服务器响应为:5.7.0 需要身份验证。”

\n

我检查了这篇文章\n SMTP 服务器需要安全连接或客户端未经过身份验证。服务器响应为: 5.5.1 需要身份验证?

\n

我发现谷歌不再支持第三方应用程序,它不允许安全性较低的应用程序\n这是来自谷歌安全性较低的应用程序\n安全性较低的应用程序访问:

\n

某些应用程序和设备使用安全性较低的登录技术,这会使您的帐户容易受到攻击。您可以关闭对这些应用程序的访问权限(我们建议这样做),或者如果您想尽管存在风险但仍想使用它们,则可以将其打开。如果不使用\xe2\x80\x99,Google 将自动关闭此设置。\n此设置不再可用。了解更多

\n

所以我尝试添加 SmtpServer.UseDefaultCredentials = false; 但没有任何作用,我认为问题是谷歌不再支持第三方访问电子邮件。\n这是我的代码

\n
try\n{\n    MailMessage mail = new MailMessage();\n    System.Net.Mail.SmtpClient SmtpServer =\n        new System.Net.Mail.SmtpClient("smtp.gmail.com");\n    string sender = "user@gmail.com";\n    mail.From = new MailAddress(sender);\n    mail.To.Add("receiver@plastikon.com");\n    mail.Priority = MailPriority.High;\n    mail.Subject = subject;\n    mail.IsBodyHtml = true;\n    mail.Body = ($"{body} \\n Name of computer: { HostName} ");\n\n    SmtpServer.Port = 587;\n    SmtpServer.Credentials = new \n    System.Net.NetworkCredential("user@gmail.com", "Password");\n    SmtpServer.EnableSsl = true;\n    SmtpServer.UseDefaultCredentials = false;\n\n    SmtpServer.Send(mail);\n}\n …
Run Code Online (Sandbox Code Playgroud)

c# winforms

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

如何从ServiceStack API中删除AssignRoles和UnAssignRoles

我在ServiceStack中使用身份验证功能,并将Auth插件配置为使用CredentialsAuthProvider.在生成的元数据页面上,ServiceStack显示以下操作:

  • 验证
  • AssignRoles
  • UnAssignRoles

我只使用Auth操作,为什么我想删除角色操作以避免本页的读者对如何使用API​​感到困惑.这可能吗?

servicestack

7
推荐指数
2
解决办法
1573
查看次数

将自托管代理和 Azure 托管代理合并在同一个池中

我目前在 Visual Studio Team Services 上使用 Azure 托管构建代理。现在,我已在本地安装了构建代理,并成功将其配置为作为默认代理池的一部分运行。我还可以更改我的项目以使用默认代理池,一切都会按预期进行。

我的问题是:是否可以配置项目或代理池以包含来自本地和 Azure 托管的构建代理?我希望 VSTS 首先选择我的本地构建代理(如果可用)。如果构建已在此代理上运行或者不可用,我希望 VSTS 选择托管在 Azure 上的构建代理。这样,我可以在本地运行大多数构建,但如果我用完本地构建槽或我的服务器不可用,则可以使用 Azure。

azure-devops azure-pipelines

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

结合使用Stripe Intents API和计费(定期订阅)

我已经尝试了三种不同的Stripe支持人员来获得明确的答案。似乎没有人知道如何解决这个问题。我想使用Stripe为定期订阅的客户注册。选择计划时,将显示信用卡表格。客户输入信用卡信息,然后单击“付款”并创建订阅。

我已经通过使用Stripe.js和令牌通过向客户端添加一些JavaScript来完成此操作:

function pay() {
    stripe.createToken(card).then(function (result) {
        if (result.error) {
            // Do something
        } else {
            var token = result.token.id;
            $.post("/api/subscriptions/create?token=" + token, ...);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

在服务器上,我将令牌放在客户身上(C#中的示例,但可以是任何东西):

function pay() {
    stripe.createToken(card).then(function (result) {
        if (result.error) {
            // Do something
        } else {
            var token = result.token.id;
            $.post("/api/subscriptions/create?token=" + token, ...);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

并创建一个订阅:

customerService.Update(customerId, new CustomerUpdateOptions
{
    SourceToken = token,
});
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都按预期进行。Stripe自动为第一笔付款创建发票并创建自动费用。它还会为下个月生成一张看起来不错的发票。

我现在应该很高兴,但我不高兴。测试上述代码时,不适用于需要3D安全和类似扩展身份验证检查的卡。在那种情况下,创建订阅时我会从Stripe收到错误消息,说该卡无效(我想是因为我们从未完成3D安全身份验证)。

据我从Stripe文档中了解到的那样,显示3D安全身份验证对话框将要求我使用Checkout或Intents API。我不想使用Checkout,但是Intents API看起来像是正确的选择。

使用意图,我需要先提出意图:

var items = new List<SubscriptionItemOption> {
    new SubscriptionItemOption {
        PlanId …
Run Code Online (Sandbox Code Playgroud)

stripe-payments

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

ASP.NET Core中间件中的状态代码错误

我在一个我创建的简单中间件中遇到了问题.响应的状态代码是200,即使我在控制器操作中抛出异常并且返回给客户端的状态代码是500.

我的中间件看起来像这样:

public async Task Invoke(HttpContext context)
{
    try
    {
        await _next.Invoke(context);
    }
    catch (Exception exception)
    {
        // context.Response.StatusCode == 200
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

看起来将异常转换为500的逻辑发生在中间件管道的后续步骤中.

Configure方法Startup.cs如下所示:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    //app.UseExceptionHandler("/Home/Error");
    app.UseMiddleware<MyMiddleware>();
    app.UseStaticFiles();
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}
Run Code Online (Sandbox Code Playgroud)

请注意,我没有使用UseExceptionHandler.

asp.net middleware asp.net-core

5
推荐指数
0
解决办法
474
查看次数