小编Nie*_*nch的帖子

为什么我不能简单地添加包含所有列的索引?

我在SQL Server数据库中有一个表,我希望能够尽快搜索和检索数据.我不关心插入表中需要多长时间,我只关心我获取数据的速度.

问题是使用20种或更多不同类型的查询访问该表.这使得添加专为每个查询设计的索引变得繁琐.我正在考虑只是添加一个包含表的所有列的索引.这不是你通常在"好"数据库设计中所做的事情,所以我假设有一些很好的理由我不应该这样做.

谁能告诉我为什么我不应该这样做?

更新:我忘了提,我也不关心我的数据库的大小.没关系,这意味着我的数据库大小会比它需要的大

sql sql-server indexing non-clustered-index

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

在Web应用程序中设置WCF TCP服务

我已经和它斗争了好几天,实际上经历了一百篇文章,给出了如何在Web应用程序中设置基于WCF TCP的服务的部分指导.如果有人可以帮助我,我会将这个问题变成一个完整的指南.

当前状态

net.tcp连接适用于我的开发机器.它在部署到Windows Server 2008 R2后也可在本地运行.但是,它不能远程工作,即使可以远程telnet到服务器上的端口808.滚动到问题的底部以获取详细信息.如果可以的话请帮忙.

我将为此详细信息创建一个新问题,如果我从中得到结果,则用答案更新此问题.

我创建ServerHubService.svc了以下内容:

namespace Manage.SignalR
{
    [ServiceContract]
    public class ServerHubService
    {
        [OperationContract]
        public void UpdateServerStatus(string serverStatus)
        {
            // Do something
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

托管服务的应用程序的配置

在线教程之后,我在Web.config中添加了以下内容(我尝试了很多不同的变体).这是托管该服务的Web应用程序的Web.config,后来我想用TCP连接.

<configuration>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="ServerHubBehavior"
      name="Manage.SignalR.ServerHubService">
        <endpoint address=""
              binding="netTcpBinding"
              bindingConfiguration="portSharingBinding"
              name="MyServiceEndpoint"
              contract="Manage.SignalR.ServerHubService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>

        <endpoint address="mex"
              binding="mexTcpBinding"
              bindingConfiguration=""
              name="MyServiceMexTcpBidingEndpoint"
              contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://test.mydomain.com:808/SignalR/ServerHubService.svc" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServerHubBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" /> …
Run Code Online (Sandbox Code Playgroud)

c# wcf wcf-binding net.tcp

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

在.NET Core Web API上为CORS启用OPTIONS标头

我没有在Stackoverflow上找到解决方案后解决了这个问题,所以我在这里分享我的问题和答案中的解决方案.

在使用AddCors的.NET Core Web Api应用程序中启用跨域策略后,它仍无法在浏览器中运行.这是因为浏览器(包括Chrome和Firefox)将首先发送OPTIONS请求,而我的应用程序只响应204 No Content.

.net-core asp.net-core asp.net-core-webapi

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

为什么我的 Azure Function 配置中需要 APPINSIGHTS_INSTRUMENTATIONKEY 和 APPLICATIONINSIGHTS_CONNECTION_STRING?

APPINSIGHTS_INSTRUMENTATIONKEY 包含 Application Insights 的检测密钥。

APPLICATIONINSIGHTS_CONNECTION_STRING包含前缀为 的 Application Insights 的检测键InstrumentationKey=

除非每个值都通过 Application Insights 启用某些功能,否则这似乎毫无意义。

azure azure-application-insights azure-functions

18
推荐指数
2
解决办法
4047
查看次数

获取传递给C#方法的参数的名称

void MyMethod(string something, params object[] parameters)
    {
      foreach (object parameter in parameters)
      {
        // Get the name of each passed parameter
      }
    }
Run Code Online (Sandbox Code Playgroud)

例如,如果我按以下方式调用方法,我想获取名称"myFirstParam"和"anotherParam".

string myFirstParam = "some kind of text";
string anotherParam = 42;
MyMethod("test", myFirstParam, anotherParam);
Run Code Online (Sandbox Code Playgroud)

也许反思就是答案?也许这是不可能的?我知道这个问题的存在,但这个解决方案在这里不起作用.

(请不要回答"这不是一个好主意".这不是我的问题.)

c#

14
推荐指数
3
解决办法
6403
查看次数

如何在不使用Service Locator模式的情况下访问Ninject.Kernel

我已经阅读了很多关于这个主题的帖子,没有找到如何在不使用服务定位器模式的情况下访问Ninject.Kernel的明确指南.

我目前在需要使用的类CustomerBusiness(这是我的服务)中有以下内容并且它工作正常,但我很清楚它不是推荐的方法.

private CustomerBusiness _customerBusiness;

private ICustomerRepository CustomerRepository
{
    get { return NinjectWebCommon.Kernel.Get<IAccountRepository>(); }
}

private CustomerBusiness CustomerBusiness
{
    get
    {
        if (_customerBusiness == null)
        {
            _customerBusiness = new CustomerBusiness(AccountRepository);
        }

        return _customerBusiness;
    }
}

public Customer GetCustomer(int id)
{
    return CustomerBusiness.GetCustomer(id);
}
Run Code Online (Sandbox Code Playgroud)

这是在上面的代码中访问的内核属性:

public static IKernel Kernel
{
    get
    {
        return CreateKernel();
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了很多关于使用工厂的建议,但没有一个解释如何使用这个工厂.如果有人能向我展示"CustomerFactory"或任何其他推荐的方法,包括如何使用它,我将非常感激.

更新

我正在使用ASP.NET Web窗体,需要CustomerBusiness从CodeBehind 访问.

我发现最终的解决方案是在这篇文章中得到最多投票的答案: 如何在asp.net Web窗体上实现Ninject或DI?

它看起来像这样(注意继承自PageBase,它是Ninject.Web的一部分 - 这是关键!):

public partial class …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection ninject

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

在 Azure Function 上的 HttpTrigger 中立即返回

我有一个带有 HttpTrigger 的 Azure 函数。

我想立即返回 202 Accepted 给调用者,然后实际处理调用,这大约需要一秒钟。

有没有一些最佳实践方法可以做到这一点?

在返回呼叫之前我不想做任何事情,因此首先调用 EventGrid 或类似的方法是不可能的。

拒绝的选项

调用事件网格

通过调用 EventGrid,我可以在 EventGrid 调用完成后立即返回,并且实际处理可以在订阅事件的另一个函数中进行。我不希望这样做,因为调用 EventGrid 需要时间,并且它有时会失败或花费比正常时间更长的时间。

添加到队列

通过将消息添加到队列,我可以完成与使用 EventGrid 相同的任务,并且它也具有与上述相同的问题。

调用函数时不使用“await”

我知道,通过在不等待的情况下调用函数内的方法,它将不会等待响应,我将能够立即返回。然而,我的测试表明这是非常不现实的,但是请告诉我您是否认为这是可行的方法以及原因。

定制螺纹

我可以使用 Thread 和 ThreadStart 等手动进行此操作,我想如果需要的话我可能会这样做,但我问这个问题是为了寻找更好的解决方案。

azure-functions

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

使用 Azure Functions V3 (.NET 5) 的计时器触发器

我正在使用 .NET 5 并开发 Azure Functions。通过 Visual Studio 添加新的计时器触发器函数时,它会添加一个包含以下内容的文件:

public static class Function1
    {
        [FunctionName("Function1")]
        public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)
        {
            log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
        }
    }
Run Code Online (Sandbox Code Playgroud)

我将其作为照片包含在此处,以强调它无法编译,因为 TimerTrigger 类不存在。

Intellisense 建议我添加以下内容:

using Microsoft.Azure.WebJobs;
Run Code Online (Sandbox Code Playgroud)

但这没有意义,因为那属于以前版本的 Azure Functions。果然,Intellisense 检测到了这一点并显示了这个错误。

在此输入图像描述

那么如何在.NET 5中使用TimerTrigger呢?

也许因为这是相对较新的,似乎还没有关于此的文档或热门帖子。

c# azure azure-functions .net-5

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

套接字缓冲它接收的数据

我有一个客户端.NET应用程序和一个服务器.NET应用程序,通过套接字连接.

客户端每500毫秒发送一个包含20个左右字符的字符串.

在我的本地开发机器上,这很好用,但是一旦客户端和服务器在两个不同的服务器上,服务器在发送时不会立即收到字符串.客户端仍然发送完美,我已经通过Wireshark证实了这一点.我还确认服务器确实每500毫秒收到一次字符串.

问题是,我等待消息的服务器应用程序实际上每20秒左右才会收到一条消息 - 然后它会从这20秒内收到所有内容.

我使用异步套接字,由于某种原因,回调不会每20秒调用一次.

AcceptCallback它建立连接和呼叫BeginReceive

handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
Run Code Online (Sandbox Code Playgroud)

这适用于我的本地计算机,但在我的生产服务器上,ReadCallback不会立即发生.

BufferSize设置为1024.我也尝试将其设置为10.一旦调用ReadCallback,它会一次从套接字读取多少数据,但这不是真正的问题.一旦它调用ReadCallback,其余的工作正常.

我正在使用微软异步服务器套接字示例,所以你可以看到我的ReadCallback方法是什么样的.

当数据到达服务器时,如何立即获得BeginReceive回调?

-

UPDATE

这已经解决了.这是因为服务器有一个单处理器和一个单核.添加另一个核心后,问题立即得到解决.现在,当呼叫进入服务器时,立即调用ReadCallback.

谢谢大家的建议!!

c# sockets

7
推荐指数
3
解决办法
2058
查看次数

获取通过 HttpClient 和 HttpRequestMessage 发送的原始请求

在运行 .NET 6(Azure 函数)的 C# 代码中,我发送一个HttpRequestMessageusing HttpClient. 它不起作用,但它应该起作用,所以我想获取我发送的原始请求,包括标头,这样我就可以与文档进行比较并查看差异。

过去我使用过 Fiddler,但现在它对我不起作用,可能是因为我的笔记本电脑上的一些安全设置。因此,我正在 Visual Studio 2022 或 .NET 6 的世界中寻找解决方案,在其中我可以获取原始请求以进行故障排除。

这个问题实际上与代码无关,但无论如何这是我的代码。

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://myendpoint.com/rest/something");

var apiToken = "AOU9FrasdgasdfagtHJNV";
request.Headers.Add("Authorization", "Basic " + apiToken);

var message = new
{
    sender = "Hey",
    message = "Hello world",
    recipients = new[] { new { id = 12345678} }
};

request.Content = new StringContent(JsonSerializer.Serialize(message), Encoding.UTF8, "application/json");
request.Headers.Add("Accept", "application/json, text/javascript");
HttpResponseMessage response = await httpClient.SendAsync(request);
Run Code Online (Sandbox Code Playgroud)

SendAsync调用时,我希望知道到底发送了什么,包括标头和内容。

.net-core .net-6.0 visual-studio-2022

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