小编Dav*_*nez的帖子

为什么我应该创建异步WebAPI操作而不是同步操作?

我在我创建的Web API中进行了以下操作:

// GET api/<controller>
[HttpGet]
[Route("pharmacies/{pharmacyId}/page/{page}/{filter?}")]
public CartTotalsDTO GetProductsWithHistory(Guid pharmacyId, int page, string filter = null ,[FromUri] bool refresh = false)
{
    return delegateHelper.GetProductsWithHistory(CustomerContext.Current.GetContactById(pharmacyId), refresh);
}
Run Code Online (Sandbox Code Playgroud)

对此Web服务的调用是通过以下方式通过Jquery Ajax调用完成的:

$.ajax({
      url: "/api/products/pharmacies/<%# Farmacia.PrimaryKeyId.Value.ToString() %>/page/" + vm.currentPage() + "/" + filter,
      type: "GET",
      dataType: "json",
      success: function (result) {
          vm.items([]);
          var data = result.Products;
          vm.totalUnits(result.TotalUnits);
      }          
  });
Run Code Online (Sandbox Code Playgroud)

我见过一些以这种方式实现上一个操作的开发人员:

// GET api/<controller>
[HttpGet]
[Route("pharmacies/{pharmacyId}/page/{page}/{filter?}")]
public async Task<CartTotalsDTO> GetProductsWithHistory(Guid pharmacyId, int page, string filter = null ,[FromUri] bool refresh = false)
{
    return …
Run Code Online (Sandbox Code Playgroud)

c# ajax jquery async-await asp.net-web-api

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

使用Moq创建具有自动填充属性的模拟?

我有一个我想要模拟的对象(比如HttpContext或其他).有时,有一些单元测试,我被迫嘲笑大量的依赖项,并适当地设置它们的依赖项和值.

下面是一些示例代码来模拟httpcontext和另一个类:

    public static HttpContextBase FakeHttpContext()
    {
        var context = new Mock<HttpContextBase>();
        var files = new Mock<HttpFileCollectionBase>();
        var request = new Mock<HttpRequestBase>();
        var response = new Mock<HttpResponseBase>();
        var session = new Mock<HttpSessionStateBase>();
        var server = new Mock<HttpServerUtilityBase>();
        var user = new Mock<IPrincipal>();
        var identity = new Mock<IIdentity>();
        request.Setup(req => req.ApplicationPath).Returns("~/");
        request.Setup(req => req.AppRelativeCurrentExecutionFilePath).Returns("~/");
        request.Setup(req => req.PathInfo).Returns(string.Empty);
        request.Setup(req => req.Form).Returns(new NameValueCollection());
        request.Setup(req => req.QueryString).Returns(new NameValueCollection());
        request.Setup(req => req.Files).Returns(files.Object);
        response.Setup(res => res.ApplyAppPathModifier(MoqIt.IsAny<string>())).
            Returns((string virtualPath) => virtualPath);
        user.Setup(usr => usr.Identity).Returns(identity.Object);
        identity.SetupGet(ident => ident.IsAuthenticated).Returns(true); …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing moq mocking

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

为什么我会在字典上使用HashSet?

我正在尝试在A*算法上实现缓存路径列表.目前,缓存的路径存储在如下列表中:

readonly List<CachedPath> _cachedPaths = new List<CachedPath>();
Run Code Online (Sandbox Code Playgroud)

在此列表上执行的操作是:

FirstOrDefault获取满足某些条件的元素

var cached = _cachedPaths.FirstOrDefault(p => p.From == from && p.To == target && p.Actor == self);
Run Code Online (Sandbox Code Playgroud)

删除和元素

_cachedPaths.Remove(cached);
Run Code Online (Sandbox Code Playgroud)

附加

_cachedPaths.Add(new CachedPath {
                    From = from,
                    To = target,
                    Actor = self,
                    Result = pb,
                    Tick = _world.WorldTick
                });
Run Code Online (Sandbox Code Playgroud)

注意:类CachedPath只有From,To和Actor覆盖GetHashCode和Equals,因此具有这些相同属性的两个实例具有相同的散列和相等性.

鉴于快速查找(包含),'HashSet'中的插入和删除是O(1)(如果我没有记错),我考虑使用'HashSet'来执行这些操作.唯一的问题是FirstOrDefault,我必须枚举整个集合才能得到它.

鉴于此问题,我还考虑使用由From,To和Actor的哈希索引的Dictionary:

Dictionary<int, CachedPath> cachedPath
Run Code Online (Sandbox Code Playgroud)

再一次,如果我没有弄错的话,Dictionary还提供O(1)插入,删除和Key检索.这使我认为Dictionary是HashSet + O(1)元素检索功能.

我错过了什么吗?在它支持更多操作的意义上,字典真的比HashSet好吗?

提前致谢.

c# dictionary hashset

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

使用VS调试MSVSMON.EXE非常慢

我正在尝试使用Windows 7上的IIS 7.5从Visual Studio 2013调试ASP.NET Web应用程序.调试过程非常慢,每页加载大约需要60-90秒.我注意到,当一个页面加载时,MSVSMON.EXE(Visual Studio远程调试监视器)在我的四核机器上保持25-30%的CPU,我怀疑它是罪魁祸首.

在另一台装有Windows 8和IIS 8.5的PC上,使用几乎毫无意义的MSVSMON,调试速度要快得多.我试图模仿前一台机器的Visual Studio和IIS的每一个调试设置,但调试仍然很慢,MSVSMON仍然达到高CPU使用率.

为什么会这样?我该怎么做才能解决我的问题并减少CPU使用率?

asp.net iis debugging visual-studio

8
推荐指数
2
解决办法
2261
查看次数

F# - 如何正确实现安装程序并使用NUnit初始化变量

我正在第一次潜入F#工作,我正在进行几次C#单元测试,我必须将F#作为练习.我们的测试非常复杂,但我很喜欢这个挑战(使用设置,继承,拆卸等).

正如我所看到的那样,如果可能的话,应该避免可变性,但是当编写[SetUp]测试的部分时,我似乎找不到跳过可变性的方法.为测试创建虚拟XML的示例::

[<TestFixture>]
type CaseRuleFixture() = 

    [<DefaultValue>] val mutable xsl : XNamespace
    [<DefaultValue>] val mutable simpleStylesheet : XElement
    [<DefaultValue>] val mutable testNode : XElement
    [<DefaultValue>] val mutable rootNode : XElement
    [<DefaultValue>] val mutable root : XElement

    let CreateXsltHeader(xsl: XNamespace) =
        // Build XSLT header
        let styleSheetRoot = 
            new XElement(
                xsl + "stylesheet", 
                new XAttribute(XName.Get "version", "1.0"), 
                new XAttribute(XNamespace.Xmlns + "xsl", "http://www.w3.org/1999/XSL/Transform"), 
                new XAttribute(XNamespace.Xmlns + "msxsl", "urn:schemas-microsoft-com:xslt"),
                new XAttribute(XName.Get "exclude-result-prefixes", "msxsl"),
                new XAttribute(XNamespace.Xmlns + "utils", "urn:myExtension"))

        let outputNode = …
Run Code Online (Sandbox Code Playgroud)

f# unit-testing

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

Service Fabric - 使用app.config和settings.xml之间的区别?

我已经能够在Azure服务结构中使用Settings.xml和App.config来检索像连接字符串这样的参数.两者之间有什么区别?我应该如何使用它们?

.net azure-service-fabric

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

如何在Simple OData Client中启用gzip压缩?

我正在尝试使用像这样的简单OData客户端库(C#)执行从CRM Dynamics检索信息的查询:

var settings = new ODataClientSettings(resource + "/api/data/v8.0/");
settings.BeforeRequest = (request) =>
    {
        request.Headers.Clear();
        request.Headers.Add("Authorization", accesstoken.AccessTokenType + " " + accesstoken.AccessToken);
    };

settings.PayloadFormat = ODataPayloadFormat.Json;
var client = new ODataClient(settings);
var annotations = new ODataFeedAnnotations();

var transactions = await client.For("mss_transaccions").FindEntriesAsync(annotations);
while (annotations.NextPageLink != null)
{
    transactions = transactions.Union(await client.For("mss_transaccions").FindEntriesAsync(annotations.NextPageLink, annotations));
}
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但它非常慢,因为我对mss_transaccions表的查询有7200个实体.我正在看Fiddler的输出,我可以看到它正在尝试下载大约20 MB的信息.

我试图在谷歌浏览器上运行相同的查询,我可以看到默认情况下获得的响应以gzip格式压缩,从20MB到仅仅500KB.所以我推断Simple OData Client没有进行任何压缩,这就是为什么它非常慢.

此外,来自OData Simple Client的请求要求提供另外4MB的元数据信息,而Chrome或简单的HttpClient请求则不需要进行该调用.

有什么我可以做的来改善它并启用压缩吗?

谢谢.

.net c# compression dynamics-crm odata

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

Python - 如何在 AWS Lambda 中优雅地处理超时

我有一个 lambda,我需要它正常关闭并登录到外部系统。在查看了有关此事的一些文献后,我使用线程得出了以下解决方案:

def lambda_handler(event, context):

    threshold_millis = 10 * 1000  # leave when there are only 10 seconds left
    que = queue.Queue()
    t = threading.Thread(target=lambda q, ev: q.put(do_work(ev)), args=(que, event))
    t.daemon = True
    t.start()

    while True:
        if context.get_remaining_time_in_millis() < threshold_millis:
            # Do some logging notifying the timeout
            return {
                "isBase64Encoded": False,
                "statusCode": 408,
                "headers": {'Content-Type': "application/json"},
                "body": "Request timed out"
            }

        elif not t.isAlive():
            response = que.get()
            return response

        time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

虽然它有效,但我想知道:有没有比这个更好的实践来优雅地处理 AWS Lambda 中的超时?

python amazon-web-services aws-lambda

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

SSH.NET - 消息类型80无效

我有以下代码尝试连接到使用OpenSSH构建的SFTP服务器(服务器正常工作,因为我已经能够通过WinSCP客户端成功连接到此FTP):

ConnectionInfo ConnNfo = new ConnectionInfo("127.0.0.1", 22, "usertest",
    new AuthenticationMethod[]{

        // Pasword based Authentication
        new PasswordAuthenticationMethod("usertest","usertest"),
    }
);

// Upload A File
using (var sftp = new SftpClient(ConnNfo))
{
    sftp.Connect();
    sftp.ChangeDirectory(@"/C:/IISFTP/");
    using (var uplfileStream = File.OpenRead(uploadfn))
    {
        sftp.UploadFile(uplfileStream, uploadfn, true);
    }
    sftp.Disconnect();
}
Run Code Online (Sandbox Code Playgroud)

调用该sftp.Connect()行时,会引发以下异常:

消息类型80无效

为什么会这样?如何使用SSH.NET连接到我的SFTP服务器?

谢谢

c# ssh sftp openssh ssh.net

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

如何在F#模式匹配中"压缩"类似的分支

我手头有以下代码:

    match intersection with
    | None ->
        printfn "Please provide an empty intersection for ring placement"
        gameState
    | Some x ->
        match x.Status with
        | Empty ->
            let piece = { Color = gameState.Active.Color; Type = Ring }
            putPieceOnIntersection gameState.Board pos piece

            printfn "%s ring placed at %A" (colorStr gameState.Active.Color) pos

            // Decide if we ended this phase
            let updatedPhase = if ringsPlaced = 10 then Main else Start(ringsPlaced + 1)
            let newActivePlayer = gameState.Players |> Array.find (fun p -> …
Run Code Online (Sandbox Code Playgroud)

f#

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