我在SQL Server数据库中有一个表,我希望能够尽快搜索和检索数据.我不关心插入表中需要多长时间,我只关心我获取数据的速度.
问题是使用20种或更多不同类型的查询访问该表.这使得添加专为每个查询设计的索引变得繁琐.我正在考虑只是添加一个包含表的所有列的索引.这不是你通常在"好"数据库设计中所做的事情,所以我假设有一些很好的理由我不应该这样做.
谁能告诉我为什么我不应该这样做?
更新:我忘了提,我也不关心我的数据库的大小.没关系,这意味着我的数据库大小会比它需要的大
我已经和它斗争了好几天,实际上经历了一百篇文章,给出了如何在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) 我没有在Stackoverflow上找到解决方案后解决了这个问题,所以我在这里分享我的问题和答案中的解决方案.
在使用AddCors的.NET Core Web Api应用程序中启用跨域策略后,它仍无法在浏览器中运行.这是因为浏览器(包括Chrome和Firefox)将首先发送OPTIONS请求,而我的应用程序只响应204 No Content.
APPINSIGHTS_INSTRUMENTATIONKEY 包含 Application Insights 的检测密钥。
APPLICATIONINSIGHTS_CONNECTION_STRING包含前缀为 的 Application Insights 的检测键InstrumentationKey=。
除非每个值都通过 Application Insights 启用某些功能,否则这似乎毫无意义。
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)
也许反思就是答案?也许这是不可能的?我知道这个问题的存在,但这个解决方案在这里不起作用.
(请不要回答"这不是一个好主意".这不是我的问题.)
我已经阅读了很多关于这个主题的帖子,没有找到如何在不使用服务定位器模式的情况下访问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) 我有一个带有 HttpTrigger 的 Azure 函数。
我想立即返回 202 Accepted 给调用者,然后实际处理调用,这大约需要一秒钟。
有没有一些最佳实践方法可以做到这一点?
在返回呼叫之前我不想做任何事情,因此首先调用 EventGrid 或类似的方法是不可能的。
通过调用 EventGrid,我可以在 EventGrid 调用完成后立即返回,并且实际处理可以在订阅事件的另一个函数中进行。我不希望这样做,因为调用 EventGrid 需要时间,并且它有时会失败或花费比正常时间更长的时间。
通过将消息添加到队列,我可以完成与使用 EventGrid 相同的任务,并且它也具有与上述相同的问题。
我知道,通过在不等待的情况下调用函数内的方法,它将不会等待响应,我将能够立即返回。然而,我的测试表明这是非常不现实的,但是请告诉我您是否认为这是可行的方法以及原因。
我可以使用 Thread 和 ThreadStart 等手动进行此操作,我想如果需要的话我可能会这样做,但我问这个问题是为了寻找更好的解决方案。
我正在使用 .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呢?
也许因为这是相对较新的,似乎还没有关于此的文档或热门帖子。
我有一个客户端.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.
谢谢大家的建议!!
在运行 .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调用时,我希望知道到底发送了什么,包括标头和内容。
c# ×5
.net-core ×2
azure ×2
.net-5 ×1
.net-6.0 ×1
asp.net-core ×1
indexing ×1
net.tcp ×1
ninject ×1
sockets ×1
sql ×1
sql-server ×1
wcf ×1
wcf-binding ×1