小编Ove*_*ack的帖子

使用 Office 365 的 SmtpClient 速度极慢

我正在开发 MVC5 网站。本网站包含“联系我们”表格,用户可以在其中联系网站支持。

问题是SendMailAsync 至少需要 10-13 秒才能完成(无附件),并且在此过程运行时,用户被卡住并等待服务器的响应 - 无论电子邮件是否成功发送。

这是我当前的 ActionResult 方法:

[HttpPost]
public async Task<ActionResult> Contact(MessageModel Model)
{
    //...
    await SendMessage(Model);
    //...
    return View();
}
Run Code Online (Sandbox Code Playgroud)

这是我负责发送电子邮件的方法:

private async Task SendMessage(MessageModel Model)
{
    var Message = new MailMessage();
    Message.From = ...;
    Message.To.Add(...);
    Message.Subject = ...;
    Message.IsBodyHtml = true;

    SmtpClient Client = new SmtpClient();
    Client.UseDefaultCredentials = false;
    Client.Credentials = ...;
    Client.Port = 587;
    Client.Host = "smtp.office365.com";
    Client.DeliveryMethod = SmtpDeliveryMethod.Network;
    Client.EnableSsl = true;

    await Client.SendMailAsync(Message);
}
Run Code Online (Sandbox Code Playgroud)

有没有更快的工作替代方案?我可以这样运行它:

await Task.Factory.StartNew(() …
Run Code Online (Sandbox Code Playgroud)

c# email asp.net-mvc

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

传递Nullable Integer(int?SomeValue = NULL)作为参数存储过程

我正在尝试创建一个需要4个参数的存储过程.这4个参数决定了返回表的外观.

@C_ID参数始终为数字.@U_ID@P_ID值可以包含有效的数值,或者可以(或应该)传递,NULL因为WHERE条件执行或不执行.

ALTER PROCEDURE [dbo].[GetData]
    @C_ID integer,
    @U_ID integer = Null,
    @P_ID integer = Null,
    @SortIndex integer = 1
AS 
BEGIN
    SELECT
        ID, P_ID, U_Name, P_Name, 
        FORMAT(Date_When, 'dd/MM/yyyy hh:mm tt')
    FROM 
        SomeTable
    WHERE 
        C_ID = @C_ID 
        AND (@P_ID IS NULL OR P_ID = @P_ID) 
        AND (@U_ID IS NULL OR U_ID = @U_ID)
   ORDER BY 
        CASE WHEN @SortIndex = 1 THEN -ID 
             ELSE ID 
        END ASC
END
Run Code Online (Sandbox Code Playgroud)

在SQL Server 2014上,以下执行工作正常,没有任何错误:

exec GetData …
Run Code Online (Sandbox Code Playgroud)

c# sql sql-server

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

基于绑定的XAML更改框架背景

我有一个基于以下类的ObservableCollection:

public class Data
{
    public string Text { get; set; }
    public DateTime Date { get; set; }
    public bool IsActive { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用此observablecollection并将其绑定为ListView的ItemSource。以下是用于显示数据的DataTemplate-

<DataTemplate>
    <ViewCell>
        <Frame OutlineColor="White" HasShadow="False">
             <!-- Data -->
        </Frame>
    </ViewCell>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

由于ObservableCollection是具有boolean属性的Data类的集合,因此我想使用它来更改框架的背景色

  • 如果属性IsActive为true-BackgroundColor为Red

  • 如果属性IsActive为false-BackgroundColor为蓝色

我已经研究了触发器的实现,但是似乎无法使其正常工作,并且不确定所缺少的内容。

根据Xamarin文档,我应该能够:

<Frame>
    <Frame.Trigger>
        <!-- -->
    </Frame.Trigger>  
</Frame>
Run Code Online (Sandbox Code Playgroud)

但是,这似乎是不可能的。这也不是-

<Frame>
<Frame.Style>
    <Style TargetType="Frame">
        <Setter Property="BackgroundColor" Value="Blue" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsActive}" Value="True">
                <Setter Property="BackgroundColor" Value="Red"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Frame.Style>
</Frame>
Run Code Online (Sandbox Code Playgroud)

上面的代码给出以下错误消息:

Xamarin.Forms.Xaml.XamlParseException: Position 28:26. …
Run Code Online (Sandbox Code Playgroud)

c# xaml mvvm

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

Azure数据表-将RowKey正确用作DateTime.Ticks吗?

我正在处理一个涉及Azure IOT集线器和Azure功能的Azure项目。

我大约有50个传感器,每10秒会向IOT集线器发送一条新消息。

每次Azure IOT Hub收到新消息时,我都想执行一个函数,该函数读取发送的消息并将其保存到Azure表存储中。

此刻,我对应该使用哪种Azure Table存储设计有些困惑。到目前为止,这是我建议的表存储设计:

[PartitionKey][RowKey][TimeStamp][SensorSerial][Reading][Type]
Run Code Online (Sandbox Code Playgroud)

这是Azure存储资源管理器中数据外观的模拟:

 [GroupA][?][2017-05-03T12:20:22.713Z][xxx][60][Temperature]
 [GroupA][?][2017-05-03T12:25:22.713Z][xxx][61][Temperature]
 [GroupA][?][2017-05-03T12:30:22.713Z][xxx][59][Temperature]
 [GroupB][?][2017-05-03T12:35:22.713Z][yyy][90][Humidity]
 [GroupB][?][2017-05-03T12:40:22.713Z][yyy][92][Humidity]
Run Code Online (Sandbox Code Playgroud)

我将RowKey留在“?” 目前,因为它与手头的问题有关。

问题是,那我希望能够查询既基于SensorSerial表存储的数据和规定的时间框架 - 如得到最后15秒所有XXX读数

以下查询始终不返回任何数据:

TableQuery<Readings> rangeQuery = new TableQuery<Readings>().Where(
TableQuery.CombineFilters(
    TableQuery.GenerateFilterCondition("SensorSerial", QueryComparisons.Equal, "xxx"),
    TableOperators.And,
    TableQuery.GenerateFilterConditionForDate("TimeStamp", 
    QueryComparisons.GreaterThanOrEqual, DateTime.Now.AddSeconds(-15))));
Run Code Online (Sandbox Code Playgroud)

从到目前为止的内容来看,我不确定为什么会这样- 无法基于TimeStamp字段过滤数据。因此,必须将RowKey用作某种伪TimeStamp日期时间刻度字段。

因此,为了解决此问题,我计划将其用作RowKey值

var RowKey = string.Format("{0:D19}", DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks);
Run Code Online (Sandbox Code Playgroud)

这将满足此查询并返回必要的值:

TableQuery<Readings> query = new TableQuery<SensorEntity>().Where(
TableQuery.CombineFilters(
(TableQuery.GenerateFilterCondition("SensorSerial", QueryComparisons.Equal, "xxxx")), 
TableOperators.And,
(TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.LessThanOrEqual, 
"2519084875883616261"))));
Run Code Online (Sandbox Code Playgroud)

但是,在这里我可能是错的,由于以下原因这种方法可能会引起一些问题

如果两个或多个传感器同时/间隔传输数据怎么办?RowKey必须是唯一的,当一个传感器向Azure存储中插入新行时,另一传感器将无法继续。

我可以运行该代码,希望传输/数据处理/插入会导致足够的延迟,而不会导致任何问题,但是依靠它会很糟糕。

有没有更好的办法?一种更安全的故障排除方法,允许我根据指定的时间和唯一的设备标识符查询Azure数据表存储吗?

c# azure azure-storage

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

NativeScript找不到Angular组件

我刚开始使用Angular和NativeScript,对于我的生活,我无法弄清楚为什么我无法获得对组件的引用.

首先,我使用以下命令生成初始文件:tns create Test -ng.

接下来,我创建以下文件结构:

App_Resource
components
---app
------app.component.ts
---create
------create.component.ts
------create.component.html
app.module.ts
app.routing.ts
main.ts
Run Code Online (Sandbox Code Playgroud)

这是app.component.ts

import { Component } from "@angular/core";
import { Router } from "@angular/router";
@Component({
    selector: "my-app",
    template: "<page-router-outlet></page-router-outlet>"
})
export class AppComponent { }
Run Code Online (Sandbox Code Playgroud)

这是create.component.ts

import { Component } from "@angular/core";
import { Location } from "@angular/common";
import { Router } from "@angular/router";
import * as AppSettings from "application-settings";
@Component({
    selector: "create",
    templateUrl: "./components/create/create.component.html",
})
export class CreateComponent …
Run Code Online (Sandbox Code Playgroud)

nativescript angular2-nativescript angular

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

其中泛型 T 是抽象类的实现

给定以下类和层次结构:

public abstract class AbsractClass<T>
{ 
    public T Id { get; private set; }
}

public class ImplementationA : AbsractClass<Guid> { }

public class ImplementationB : AbsractClass<int> { }
Run Code Online (Sandbox Code Playgroud)

我应该在where子句/约束中使用什么约束来指定泛型 T 必须是 AbsractClass 的实现。这意味着实体将接受ImplementationA 或ImplementationB。

public abstract class Entity<T> // where : T ?
{ 
}
Run Code Online (Sandbox Code Playgroud)

这是可能的还是我应该使用接口?

c# .net-core

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