我正在编写一个简单的HTTP服务器,它将接受主要来自cURL的PUT请求作为客户端,并且我在处理Expect: 100-continue标头时遇到了一些问题.
据我了解,服务器应该读取标头,HTTP/1.1 100 Continue在连接上发回响应,读取流到值Content-Length,然后发回真实的响应代码(通常HTTP/1.1 200 OK但任何其他有效的HTTP应答都应该这样做).
嗯,这正是我的服务器所做的.问题是,显然,如果我发送100 Continue答案,cURL无法报告任何后续的HTTP错误代码并假定上传成功.例如,如果由于内容的性质而导致上传被拒绝(存在基本数据检查),我希望调用客户端检测问题并采取相应措施.
我错过了一些明显的东西吗
编辑:这是来自cURL的示例输出,其中包含一个包含错误的辅助标头:
> PUT /test1%2Epdf HTTP/1.1
> Authorization: Basic xxxx
> User-Agent: curl/7.20.0 (i386-pc-win32) libcurl/7.20.0 OpenSSL/0.9.8l zlib/1.2.3
> Host: localhost
> Accept: */*
> Content-Length: 24
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
< HTTP/1.1 415 Unsupported Media Type
< Connection: close
< Content-Type: text/xml
< Content-Length: 289
<
Run Code Online (Sandbox Code Playgroud) 我必须处理由瑞士邮局发行的USB令牌证书.在同一令牌上提供两个证书.在其预期的使用领域中,一个具有"不可否认性"而另一个具有"数字签名".
现在,我无法理解这两者之间的实际区别是什么:我总是在同一个证书中看到,而不是两个相同身份的证书,每个证书都有一个角色.事实上,我无法想象一个场景,其中不可否认性和数字签名不一样,对于所有实际问题,同样的事情.
任何人都可以向我解释一下有什么不同吗?如果你有一个关于在什么情况下应该挑选另一个的建议,这也会有所帮助
我们正在使用 Entity Framework core 和 Azure DevOps 构建一个 ASP.net 应用程序,并使用 MSSQL server 2016 定位 IIS。
我们的测试服务器是包含 IIS 和 SQL 服务器实例的本地 Windows 2016 机器。
我已经成功编写了一个部署工作流,可以在代码本身的测试服务器上进行持续部署,但我找不到任何部署数据库的方法。第一个版本的目标是 asp.net core 2.0,所以我可以使用命令行在 IIS 之外启动应用程序并触发数据库更新,但是当我们切换到 2.2 和进程内 IIS 部署时,我们显然失去了这种能力。
我想将数据库的部署集成到部署管道中的服务器,包括数据库创建,但我找不到任何使用 Azure Devops 的方法:我可以针对 Azure SQL 实例,但是,除非我我错过了一些东西,而不是本地的。
所以:
我有以下问题:我们正在构建一个相当大的应用程序(win32,Delphi 6 Enterprise).在应用程序的几个部分中,使用模态窗口,通常包含主窗口选择的细节.
我们包含了对WM_SYSCOMMAND消息处理的修改,这样,如果窗口是模态的,那么SW_SHOWMINNOACTIVE消息将被发送到应用程序的主窗口.这导致整个应用程序被最小化而不仅仅是模态形式.
但是,在特定情况下会出现问题:如果调用窗口设置为全屏,则在恢复时,模式窗口将显示在(禁用)最大化主窗口下(这似乎发生在Windows 7上)
我的问题有两个问题:
首先,当应用程序恢复时,我似乎没有得到任何syscommand消息,因此我无法引入代码来恢复Z-Order,因为我不知道在哪里放置它.其次,在我看来,如果整个应用程序被最小化,单击任务栏中的应用程序按钮应该以相同的状态恢复它,而不是在它下面的模式窗口.有办法解决这个问题吗?
编辑:我们做了一些额外的测试,似乎我们实际上可以在WM_ACTIVATE处理程序中检测主窗体的问题.我们还可以在该阶段识别模态窗口.但是,我无法找到将其恢复到Z-Order顶部的方法.
Edit2:这是最小化模态形式时最小化应用程序的代码:
procedure TfmGITForm.WMSysCommand(var Message: TWMSysCommand);
begin
if (fsModal in FormState) or
not Application.MainForm.Visible then
begin
case Message.CmdType of
SC_MINIMIZE:
begin
ShowWindow(Application.Handle, SW_SHOWMINNOACTIVE);
end;
SC_RESTORE:
begin
ShowWindow(Application.Handle, SW_SHOWNORMAL);
inherited;
end;
else
inherited;
end; // case
end
else
inherited;
end;
Run Code Online (Sandbox Code Playgroud)
我们所有的形式都来自那个.
我正在将Delphi ISAPI dll转换为在IIS 7.0和7.5上更好地工作.ISAPI用于从注册表中读取其配置,但我想将其转换为使用同一文件夹中的web.config文件.
它适用于CGI,但ISAPI是另一回事.我正在使用GetModuleFileName模块的路径,当然,它正在给我回到IIS工作进程的路径(C:\ Windows\SysWOW64\inetsrv).
有没有办法获得ISAPI DLL本身的物理路径?
我正在努力尝试修改使用COM对象实例进行通信的现有程序集。
COM服务器实际上是主应用程序的(可选)扩展名。两者都通过简单副本部署到目标系统。
当前,这两个应用程序仅在本地部署到我们的办公室(尽管主要应用程序COM客户端在我们的客户中部署得更广泛),并且我们手动注册服务器。我们需要针对云服务上的部署进行重新设计,因此,我正在研究免注册COM。
到目前为止,我已经尝试过:
Error in the Dll” OLE异常。一些谷歌搜索告诉我这是因为DllgetClassObject缺少出口。DllGetClassObject从可执行文件导出(使用from的内置实现将export子句添加到项目源中),System.Win.ComServ这将导致在调用时(直接或通过激活上下文)发生访问冲突。 AV发生的地方。这是我使用的清单(我以注释形式在代码中留下了各种尝试):
服务器应用程序清单
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
name="wgaticket.exe"
type="Win32"
version="1.0.0.0"
/>
<file name = "wgaticket.exe">
<comClass
clsid="{E33A1F59-CEA2-463E-97B2-1CCDA66DA984}"
/>
<!-- comClass
clsid="{E33A1F59-CEA2-463E-97B2-1CCDA66DA984}"
threadingModel = "Apartment"
/-->
<typelib tlbid="{414AE7FB-3025-40D8-B14C-2A29B6E42C29}"
version="1.0" helpdir=""/>
</file>
<!--comInterfaceExternalProxyStub
name="INewTicket"
iid="{740BF585-3246-483E-9146-B6A8E49400B5}"
proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
baseInterface="{00000000-0000-0000-C000-000000000046}"
tlbid = "{414AE7FB-3025-40D8-B14C-2A29B6E42C29}" /-->
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges> …Run Code Online (Sandbox Code Playgroud) 我正在致力于将一组悖论表移植到 SQLite。为此,我创建了一个测试应用程序(在某种程度上)模拟当前的使用场景:多个用户访问同一数据库文件并同时执行读写操作。
该应用程序非常简单:它将启动多个线程,每个线程创建一个连接,打开一个表,然后随机读取、更新或插入表内。
应用程序几乎立即遇到“数据库表已锁定”错误。我尝试了几种方法来解决这个问题,但似乎没有任何效果。我究竟做错了什么 ?
这是线程内部的代码:
procedure testDB(TargetFolder: string);
var
Conn: TFDConnection;
Table: TFDTable;
i: Integer;
begin
randomize;
Conn := TFDConnection.Create(nil);
try
Conn.DriverName := 'SQLite';
Conn.LoginPrompt := false;
Conn.Params.clear;
Conn.Params.Database := TPath.Combine(TargetFolder, 'testDB.sdb');
Conn.Params.Add('DriverID=SQLite');
// all this is the result of several attemp to fix the table locking error. none worked
Conn.Params.Add('LockingMode=Normal');
Conn.Params.Add('Synchronous=Normal');
Conn.UpdateOptions.UpdateMode := TUpdateMode.upWhereAll;
Conn.UpdateOptions.LockWait := True;
Conn.UpdateOptions.LockMode := TFDLockMode.lmPessimistic;
Conn.UpdateOptions.LockPoint := TFDLockPoint.lpImmediate;
Conn.UpdateOptions.AssignedValues := [uvLockMode,uvLockPoint,uvLockWait];
Conn.Open();
Conn.ExecSQL('CREATE TABLE IF NOT EXISTS ''test'' (''ID'' INTEGER NOT NULL PRIMARY …Run Code Online (Sandbox Code Playgroud) 在Delphi IDE中,Delphi中的某些组件能够向属性编辑器中包含的子控件"添加"属性.
我怎样才能与自己的TCustomPanel后代达成同样的目的呢?
更多细节:
我想要实现的目标如下:对于具有大量可视组件的应用程序,我有一个非常复杂的配置对话框.
我想在这些组件中添加一个"复杂性索引"(整数),用于根据用户的选择显示或隐藏组件(带有"简单","高级"和"专家"的下拉列表"选项".
我知道该属性实际上属于父面板,但我需要一种方法在IDE中显示它,就像它附加到与它相关的控件一样.
完美的例子是Delphi提供的各种"组织"面板: TGridPanel和TRelativePanel.其中每个都有一个ControlCollection(已发布的)属性,用于保存其他属性的实际状态,但我无法找到属性编辑器如何知道它必须将属性附加到子控件.
我在编写过滤程序时遇到问题.它通过读取文件的前5个字节并将其与固定缓冲区进行比较来检测文件是否为PDF文档:
25 50 44 46 2D
这工作正常,除了我看到一些以字节顺序标记开头的文件:
EF BB BF 25 50 44 46 2D
^-------^
我想知道PDF规范是否真的允许这样做.如果我查看该文档的第7.5节,我将其读作"否":
PDF文件的第一行应为包含5个字符%PDF的标题,后跟1.N形式的版本号,其中N是0到7之间的数字
然而,我在野外看到这些文档,用户感到困惑,因为PDF阅读器程序可以通过我的过滤器拒绝它们来打开这些文档.
那么:PDF文档开头是否允许BOM标记?(我不是在谈论字符串对象,而是PDF文件本身)
我有一个问题应该是微不足道的,但我找不到任何优雅的答案.
我有一个a的实例,IList<string>我想得到一个逗号分隔的字符串,其中包含所有不同的(不区分大小写)值.
我以为我只是使用string.Join帮助器,因为它有一个很好的重载接受一个IEnumerator<string>as参数.不幸的是,我看到了一个障碍:spring4d重新定义IEnumerator<T>,当然,到处都使用自己的类型.
结果是以下代码无法编译:
var
distinct: system.IEnumerator<string>;
begin
result := inherited GetToken;
if assigned(result) then
begin
if not Modules.Contains(STR_DID_SESSION_MODULE) then
Modules.Add(STR_DID_SESSION_MODULE);
distinct := TDistinctIterator<string>.Create(Modules, TIStringComparer.Ordinal);
result.CustomClaims.Items[STR_CLAIM_CUSTOM_MODULES] := string.Join(',', distinct);
end;
end;
Run Code Online (Sandbox Code Playgroud)
分配distinct失败E2010 Incompatible types: 'System.IEnumerator<System.string>' and 'Spring.Collections.Extensions.TDistinctIterator<System.string>'
或者,如果我从distinct中删除命名空间,那么对它的调用将string.Join失败.
知道我应该怎么做吗?没有手动遍历迭代并手动执行连接?
在 Delphi 程序中,有以下模式:
TDelegate=reference to procedure(const Arg: TMyType);
TRouter = class
...
public
procedure RegisterHandler(const route: string: handler: TDelegate);
end;
THandlerContainer = class
public
function getDelegate: TDelegate;
procedure register(const Router: TRouter);
end; // class
...
procedure THandlerContainer.register(const router: TRouter)
begin
router.RegisterHandler('route', getDelegate);
end;
Run Code Online (Sandbox Code Playgroud)
基本上,我正在注册用于处理一些消息处理的函数引用(基于“route”字符串)。
我想为我的同事简化这个模式,这样他们就不必为每个实现调用 router.RegisterHandler 自己,而只需向他们的类添加一个属性,然后将一个实例传递给 TRouter 的方法,该方法将使用 RTTI找到所有由该属性修饰的方法并注册它们。
因此,我为该装饰创建了一个简单的属性RegisterMessageHandlerAttribute(使用自定义构造函数来接收路由字符串),并编写了一个 TRouter 方法,该方法使用 RTTI 来查找用该属性装饰的所有方法:
function TRouter.RegisterHandlers(const HandlerContainerClass:
TObject);
var
RTTIContext: TRttiContext;
RttiType : TRttiType;
prop: TRttiMethod;
Attr: TCustomAttribute;
begin
RTTIContext := TRttiContext.Create;
try
RttiType := RTTIContext.GetType(HandlerContainerClass);
if …Run Code Online (Sandbox Code Playgroud) 我正在编写一个 ASP.NET Core Web 应用程序。
我有许多共享相同Json 序列化选项的类。我想在一个位置考虑这些选项
我的方法是创建一个静态类,为应用程序的不同方面提供所有这些选项。
我想知道是否可以为选项创建静态成员,或者是否需要每次需要时创建一个新实例,请记住,多个并发线程将使用返回的实例。
换句话说,我可以写:
public static class JsonOptionsProviders
{
public static readonly JsonSerializerOptions ForPreferences = new() { Converters = { new DateOnlyJsonConverter(), new TimeOnlyJsonConverter() } };
}
Run Code Online (Sandbox Code Playgroud)
或者我必须写:
public static class JsonOptionsProviders
{
public static JsonSerializerOptions ForPreferences => new() { Converters = { new DateOnlyJsonConverter(), new TimeOnlyJsonConverter() } };
}
Run Code Online (Sandbox Code Playgroud)