小编Ste*_*ane的帖子

如何处理"100继续"HTTP消息?

我正在编写一个简单的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)

post curl http

31
推荐指数
4
解决办法
7万
查看次数

X509:数字签名和不可否认性之间有什么区别

我必须处理由瑞士邮局发行的USB令牌证书.在同一令牌上提供两个证书.在其预期的使用领域中,一个具有"不可否认性"而另一个具有"数字签名".

现在,我无法理解这两者之间的实际区别是什么:我总是在同一个证书中看到,而不是两个相同身份的证书,每个证书都有一个角色.事实上,我无法想象一个场景,其中不可否认性和数字签名不一样,对于所有实际问题,同样的事情.

任何人都可以向我解释一下有什么不同吗?如果你有一个关于在什么情况下应该挑选另一个的建议,这也会有所帮助

x509

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

如何使用 Azure Devops 管道将代码优先的实体框架数据库部署到 SQL 服务器

我们正在使用 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 实例,但是,除非我我错过了一些东西,而不是本地的。

所以:

  • 如何在未安装 SDK 的机器上使用 ASP.NET Core 2.2 进程内应用程序手动创建和填充数据库?
  • 我需要向 Azure DevOps 管道添加什么才能将数据库部署到本地 MSSQL 服务器数据库

entity-framework-core azure-devops asp.net-core-2.2

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

正确处理模态窗口"最小化"行为

我有以下问题:我们正在构建一个相当大的应用程序(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 winapi windows-7 delphi-6

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

找出ISAPI DLL的物理路径

我正在将Delphi ISAPI dll转换为在IIS 7.0和7.5上更好地工作.ISAPI用于从注册表中读取其配置,但我想将其转换为使用同一文件夹中的web.config文件.

它适用于CGI,但ISAPI是另一回事.我正在使用GetModuleFileName模块的路径,当然,它正在给我回到IIS工作进程的路径(C:\ Windows\SysWOW64\inetsrv).

有没有办法获得ISAPI DLL本身的物理路径?

delphi iis dll isapi

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

通过可执行的免注册方式使用COM对象

我正在努力尝试修改使用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)

delphi com delphi-xe5

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

fireDAC 访问 SQLite 中的表锁

我正在致力于将一组悖论表移植到 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 sqlite firedac delphi-10.2-tokyo

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

(delphi)如何向子控件添加属性?

在Delphi IDE中,Delphi中的某些组件能够向属性编辑器中包含的子控件"添加"属性.

我怎样才能与自己的TCustomPanel后代达成同样的目的呢?

更多细节:

我想要实现的目标如下:对于具有大量可视组件的应用程序,我有一个非常复杂的配置对话框.

我想在这些组件中添加一个"复杂性索引"(整数),用于根据用户的选择显示或隐藏组件(带有"简单","高级"和"专家"的下拉列表"选项".

我知道该属性实际上属于父面板,但我需要一种方法在IDE中显示它,就像它附加到与它相关的控件一样.

完美的例子是Delphi提供的各种"组织"面板: TGridPanelTRelativePanel.其中每个都有一个ControlCollection(已发布的)属性,用于保存其他属性的实际状态,但我无法找到属性编辑器如何知道它必须将属性附加到子控件.

以下是TLabel放置在a内的屏幕截图,其中TRelativePanel突出显示了相关属性: 属性编辑器的屏幕截图,其中显示了放置在TRelativePanel内的TLabel组件的

delphi vcl delphi-10.2-tokyo

5
推荐指数
0
解决办法
420
查看次数

PDF文档中是否允许字节顺序标记?

我在编写过滤程序时遇到问题.它通过读取文件的前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文件本身)

pdf byte-order-mark

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

Spring4d:Spring.Collections.IEnumerator和System.IEnumerator

我有一个问题应该是微不足道的,但我找不到任何优雅的答案.

我有一个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 spring4d delphi-10.2-tokyo

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

使用 RTTI 方法调用返回的函数引用

在 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)

delphi rtti delphi-10.2-tokyo

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

System.Text.Json.JsonSerializerOptions 是线程安全的吗?

我正在编写一个 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)

.net-core .net-7.0

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