ELMAH是否记录了异常,即使它们没有冒泡到应用程序?我想在发生异常时弹出消息并仍然记录异常.目前我已经把所有东西都放在try catch块中并且吐出消息,但这变得乏味.
我已经为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)
每次更新时我都不想编写更新版本的升级脚本.有谁知道这个问题的一个很好的解决方案?
我在消费计划上运行一个Azure功能.我已经选择了无服务器功能的消费计划以及最小化成本.该函数使用来自服务总线主题的消息,并将一些输出写入blob存储.
保持功能运行最近30天大约是10美元.这是非常可以接受的,因为该函数有很多消息要消耗.将输出写入blob存储大约是20美元.也可以接受.我不明白的是,功能的底层存储帐户的费用在同一时期约为70美元.消耗主要是命中文件写操作单元和文件协议操作单元.存储帐户创建为本地冗余通用v1.
有谁能解释这里发生了什么?查看存储帐户时,会有一些blob.我认为问题在于表存储.检查存储帐户时,有如下表格:
$MetricsCapacityBlob
$MetricsHourPrimaryTransactionBlob
AzureWebJobsHostLogs201804
通过删除AzureWebJobsDashboard应用程序设置,我已禁用我的功能中的日志记录.执行此操作后,AzureWebJobsHostLogs*表似乎不再接收新行.但$ Metrics*表仍然会收到新数据.如果对这些表的写入导致我在Portal中的Costs Management视图中看到的所有文件写入活动,我都不知道.
这里发生了什么?是否真的需要从无服务器代码维护这些表,并且表访问的价格是函数本身价格的x7听起来是否正常?
在.NET完整框架中,可以在发布版本生成的堆栈跟踪中包含文件名和行号,方法是在输出中包含调试信息并将调试信息设置为pdb-only
或full
.在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)
(我不希望这变成一个优点/缺点.我知道有些人认为包含这些信息是死亡罪,有些人不这样做:)
我有一个带有服务总线触发器的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) 我有一个 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这是我的代码
\ntry\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) 我在ServiceStack中使用身份验证功能,并将Auth插件配置为使用CredentialsAuthProvider.在生成的元数据页面上,ServiceStack显示以下操作:
我只使用Auth操作,为什么我想删除角色操作以避免本页的读者对如何使用API感到困惑.这可能吗?
我目前在 Visual Studio Team Services 上使用 Azure 托管构建代理。现在,我已在本地安装了构建代理,并成功将其配置为作为默认代理池的一部分运行。我还可以更改我的项目以使用默认代理池,一切都会按预期进行。
我的问题是:是否可以配置项目或代理池以包含来自本地和 Azure 托管的构建代理?我希望 VSTS 首先选择我的本地构建代理(如果可用)。如果构建已在此代理上运行或者不可用,我希望 VSTS 选择托管在 Azure 上的构建代理。这样,我可以在本地运行大多数构建,但如果我用完本地构建槽或我的服务器不可用,则可以使用 Azure。
我已经尝试了三种不同的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) 我在一个我创建的简单中间件中遇到了问题.响应的状态代码是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
.
c# ×3
.net ×2
asp.net ×2
asp.net-core ×2
.net-core ×1
app-config ×1
azure ×1
azure-devops ×1
config ×1
csproj ×1
elmah ×1
middleware ×1
servicestack ×1
winforms ×1