我之前看到过这个问题,但我没有看到任何明确的答案,绝对没有任何答案可以解决我的问题.我创建了一个Windows服务,使用FAXCOMEXLib livrary发送传真(半自动).到目前为止,我的服务已成功发送文本文件(.txt).但是当我尝试发送pdf,jpg或tif文件时,我收到"操作失败"错误.在SO中,我已经看到很多关于运行该服务的用户的权限的讨论.我尝试了很多不同的选项(本地服务,本地用户,具有管理员权限的自定义用户,允许服务与桌面交互).但似乎没有任何区别.似乎该服务没有权限打开相应的应用程序来"打印"pdf,jpg或tif文件.但我只是在猜测.有没有人成功通过FAXCOMEXLib在Windows服务中发送传真?这是我发送传真的代码:
fileName = @"D:\temp\FaxTest.txt"; //THIS WORKS
//fileName = @"D:\temp\FaxTest.pdf"; //Operation failed
//fileName = @"D:\temp\FaxTest.tif"; //Operation failed
faxDoc.Sender.Name = faxRec.From;
faxDoc.Sender.Company = faxRec.From;
faxDoc.Body = fileName;
faxDoc.Subject = faxRec.ReferenceId;
faxDoc.DocumentName = faxRec.ReferenceId;
var to = "xxxxxxxxxx";
faxDoc.Recipients.Add(to, "Some Name");
var serverName = Environment.MachineName;
string[] returnVal = faxDoc.Submit(serverName);
Run Code Online (Sandbox Code Playgroud)
如果您想知道,是的,那些文件确实存在于具有这些名称的服务器上,并且它们是有效文件(我可以在Adobe Reader和Picture Viewer中打开它们).如果我在我的开发机器上本地运行它,这也可以正常工作.当然,在发送之前(在我的本地机器上)弹出适当的查看器.我的猜测是,由于某种原因,该服务无法打开查看器.有没有人成功地在Windows服务中以这种方式发送PDF?
我的网络应用程序中启用了一个基本网格,并启用了分页.使用Dapper通过Web API使用SQL数据填充此网格.在我的API控制器我运行两个单独的查询:一个提取的行(其在我的格示出),以及一个以获得记录的总数(在我的寻呼控制显示).这很有效.但是,我正在尝试优化我的查询.
我的第一个提取行的查询一次只返回50行(使用OFFSET和FETCH提供分页:
SELECT DISTINCT T_INDEX.*
FROM T_INDEX
INNER JOIN T_INDEXCALLER ON T_INDEX.IndexId = T_INDEXCALLER.IndexId
WHERE... --a fairly complex WHERE statement
ORDER BY CallTime DESC
OFFSET (@offset) ROWS FETCH NEXT 50 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
我的第二个查询提取所有行的计数,但使用相同的表,相同的连接和相同的WHERE子句:
SELECT COUNT(DISTINCT T_INDEX.IndexId)
FROM T_INDEX
INNER JOIN T_INDEXCALLER ON T_INDEX.IndexId = T_INDEXCALLER.IndexId
WHERE... --the same fairly complex WHERE statement
Run Code Online (Sandbox Code Playgroud)
正如我所说,这是有效的.每次查询大约需要2.5秒,总共5秒以上.无论如何,时间滞后不是世界末日,但我希望将时间缩短一半.
我想知道是否有任何方法可以检索50行并检索一个查询中所有行的总数.我意识到这两个查询正在做两件事.但我的想法是,"可能"可以调整这两个查询并将它们合并为一个,因为表,连接和WHERE子句在两者之间是相同的.
我找到了使用Dapper VARCHAR使用string输入搜索字段的解释和解决方案:
Query<Thing>("select * from Thing where Name = @Name", new {Name =
new DbString { Value = "abcde", IsFixedLength = true, Length = 10, IsAnsi = true });
Run Code Online (Sandbox Code Playgroud)
资料来源:Dapper和varchars
但有没有办法调整它来DbString为列表中的每个项目进行转换(使用IN子句)?
我试图运行的查询如下所示:
Query<IndexRec>("SELECT * FROM T_INDEX WHERE CallId IN @callIds",
new { callIds = model.LogEntries.Select(x => x.Id) });
Run Code Online (Sandbox Code Playgroud)
不幸的是,此查询运行缓慢,因为:
model.LogEntries 包含约300项. VARCHAR(30)字段.NVarchar字符串WHERE.如何告诉Dapper在我的IN子句中使用ansi字符串进行此查询?
我正在开发一个从 Google Drive 上传和下载文件的应用程序。我有上传/下载机制,并且一直在使用已上传的几个文件进行一些下载测试。大约 13 小时前一切都很好。但是,现在,我只是尝试再次下载其中一个文件,但出现“403”错误,指示“已超出此文件的下载配额”
{
"error": {
"errors": [
{
"domain": "global",
"reason": "downloadQuotaExceeded",
"message": "The download quota for this file has been exceeded."
}
],
"code": 403,
"message": "The download quota for this file has been exceeded."
}
}
Run Code Online (Sandbox Code Playgroud)
昨天我在调试和对应用程序的其他部分进行一些测试时下载了这个文件可能 10 到 20 次。10 或 20 似乎是开始限制下载的一个非常低的阈值。显然,我可以只上传一个新文件并开始下载它。所以这看起来很奇怪。有没有其他人不得不处理来自 Google Drive api 的这个错误?我的下载代码非常简单,如下所示:
var url = "https://www.googleapis.com/drive/v3/files/" + fileId + "?alt=media";
WebRequest request = WebRequest.Create(url);
request.Method = "GET";
request.Headers.Add("Authorization", "Bearer " + AccessToken);
WebResponse response = request.GetResponse();
Run Code Online (Sandbox Code Playgroud) 我正在 .Net Core 2.1 中创建一个 Azure Web 作业(通过 Visual Studio 中的“控制台”应用程序)。在这个项目中,我有一个从队列中读取消息的静态函数。在此函数中,我需要使用连接字符串(来自我的配置)写入数据库。这是我的设置:
程序.cs
class Program
{
static void Main(string[] args)
{
var builder = new HostBuilder();
builder.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices();
b.AddAzureStorage();
});
builder.ConfigureAppConfiguration((hostContext, config) =>
{
var conf = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true).Build();
config.AddConfiguration(conf);
config.AddEnvironmentVariables();
})
builder.ConfigureLogging((context, b) =>
{
b.AddConsole();
});
var host = builder.Build();
using (host)
{
host.Run();
}
}
}
Run Code Online (Sandbox Code Playgroud)
函数.cs
public class Functions
{
public static void ProcessQueueMessage([QueueTrigger("myqueue")] string message, ILogger logger, IConfiguration configuration) …Run Code Online (Sandbox Code Playgroud) 我是第一次使用 CosmosDB,并且根据此文档,我尝试通过 id 读取单个文档:
根据此文档,我的容器对象应该有一个ReadItemAsync可以用来查找和读取单个项目的方法。但是,当我将“Microsoft.Azure.Cosmos”nuget 包导入到我的项目并尝试使用此代码片段时,容器上没有ReadItemAsync. 这是我的代码片段:
using Microsoft.Azure.Cosmos;
...
var databaseId = "{databaseId}";
var containerId = "{containerId}";
var client = new CosmosClient(model.IndexDatabaseUri, model.IndexDatabasePrimaryKey);
var database = client.GetDatabase(databaseId);
var container = database.GetContainer(containerId);
var call = container... // NO ReadItemAsync HERE
Run Code Online (Sandbox Code Playgroud)
我确实在容器上看到了这些功能:
GetItemLinqQueryable
GetItemQueryIterator
GetItemQueryStreamIterator
Run Code Online (Sandbox Code Playgroud)
从它的外观来看,我可能可以使用自定义SELECT语句创建一个查询迭代器,并检索迭代器中的第一项。但这对于我想做的事情来说似乎有点过分了。在这种情况下我总是只想要一个项目。为什么这里没有ReadItemAsync方法,而文档中显示应该有一个方法?而且,如果“迭代器”是新的首选方法,那么使用 QueryIterator 与检索单个文档相比是否有任何性能考虑因素?该函数将在一天内运行数百万次。
ps - 我正在使用“Microsoft.Azure.Cosmos”nuget 包 v3.9.1