在C++中开发一个返回boost共享指针并将它们用作参数的DLL是否有效?
那么,导出这样的函数是否可以?
1.) boost::shared_ptr<Connection> startConnection();
2.) void sendToConnection(boost::shared_ptr<Connection> conn, byte* data, int len);
Run Code Online (Sandbox Code Playgroud)
特别说明:引用计数是跨越DLL边界还是需要exe和dll使用相同的运行时?
目的是克服对象所有权的问题.所以当dll和exe都不再引用它时,对象会被删除.
我在PHP中创建了一个简单的文件浏览器,通过生成过期的查询URL链接到文件.因此,对于对目录的每次访问,生成到每个文件的链接,该文件有效期为900秒.
我现在遇到的问题是生成的签名有时似乎失败了.这很奇怪,因为我故意使用外部S3库来生成URL和签名.
实际上,我尝试了以下库来生成签名:
库内部使用hash_hmac('sha256',...或hash_hmac('sha1',...) - 我也不明白为什么使用不同的哈希算法.
由于所有库的问题都是一样的,所以它也可以在我的URL生成代码中,但这很简单:
$bucket = "myBucket";
$filename = $object->Key;
$linksValidForSeconds = 900;
$url = $s3->get_object_url($bucket, $filename, $linksValidForSeconds);
Run Code Online (Sandbox Code Playgroud)
Sp $ bucket和$ linksValidForSeconds是常量,$ filename是例如"Media/Pictures/My Picture.png".但是对于相同变量的事件,它有时是有效的,因此不能.
有任何想法吗?
编辑:Typo /错误的常量变量名称已修复(谢谢)
我正面临着在JSON中序列化对象以匹配WCF函数调用的参数名称的问题.问题是映射参数名称,即传入的JSON字符串应该具有与函数中传递的参数相同的起始值,例如
"{\"GetComplexDataResult\":{\"BoolValue\":true,\"StringValue\":\"Hello World!\"}}"
Run Code Online (Sandbox Code Playgroud)
这是我在我的客户端调用的WCF函数,你可以看到参数名称与返回的参数名称相同"GetComplexDataResult"
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
String SaveData(CompositeType GetComplexDataResult);
Run Code Online (Sandbox Code Playgroud)
发生的问题是当我尝试使用Microsoft System.Web.Script.Serialization.JavaScriptSerializer或任何其他库(例如Json.NET)序列化我的对象时
它只返回我,{\"BoolValue\":true,\"StringValue\":\"Hello World!\"}即使我传递了同一类"CompositeType"的对象(这是客户端代码),例如
CompositeType GetComplexDataResult= new CompositeType();
GetComplexDataResult.BoolValue = true;
GetComplexDataResult.StringValue = "Hello World";
JavaScriptSerializer serializer = new JavaScriptSerializer();
string json = serializer.Serialize(patchVersion);
Run Code Online (Sandbox Code Playgroud)
我的问题是我如何获得这个JSON字符串
"{\"GetComplexDataResult\":{\"BoolValue\":true,\"StringValue\":\"Hello World!\"}}"
Run Code Online (Sandbox Code Playgroud)
代替
{\"BoolValue\":true,\"StringValue\":\"Hello World!\"}
Run Code Online (Sandbox Code Playgroud)
只需将我的对象传递给JSON解析器即可.我可以在生成JSON字符串后手动连接它,但这会花费太多时间来处理工作.有没有解决这个问题的解析器.
我的Windows C#/ .NET应用程序遇到了一个奇怪的问题.实际上它是一个GUI应用程序,我的工作是包含的网络组件,封装在一个程序集中.我不知道主/ GUI应用程序的代码,我可以联系它的开发人员.
现在,应用程序的UI具有"开始"和"停止"网络引擎的按钮.两个按钮都有效.为了使我的组件线程安全,我使用三种方法锁定.我不希望客户端能够在Start()完成之前调用Stop().另外还有一个轮询计时器.
我试着向你展示尽可能少的线条并简化问题:
private Timer actionTimer = new Timer(new
TimerCallback(actionTimer_TimerCallback),
null, Timeout.Infinite, Timeout.Infinite);
public void Start()
{
lock (driverLock)
{
active = true;
// Trigger the first timer event in 500ms
actionTimer.Change(500, Timeout.Infinite);
}
}
private void actionTimer_TimerCallback(object state)
{
lock (driverLock)
{
if (!active) return;
log.Debug("Before event");
StatusEvent(this, new StatusEventArgs()); // it hangs here
log.Debug("After event");
// Now restart timer
actionTimer.Change(500, Timeout.Infinite);
}
}
public void Stop()
{
lock (driverLock)
{
active = false; …Run Code Online (Sandbox Code Playgroud) 我们公司为 GUI 应用程序提供网络组件 (DLL)。
它使用计时器来检查断开连接。如果它想重新连接,它会调用:
internal void timClock_TimerCallback(object state)
{
lock (someLock)
{
// ...
try
{
DoConnect();
}
catch (Exception e)
{
// Log e.Message omitted
// Raise event with e as parameter
ErrorEvent(this, new ErrorEventArgs(e));
DoDisconnect();
}
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
所以问题是,在 DoConnect() 例程内部抛出了 SocketException(并且未被捕获)。我认为,catch(异常 e)应该捕获所有异常,但不知何故,SocketException 未被捕获并显示在 GUI 应用程序中。
protected void DoConnect()
{
//
client = new TcpClient();
client.NoDelay = true;
// In the following call the SocketException is thrown
client.Connect(endPoint.Address.ToString(), endPoint.Port);
// ... (login stuff)
}
Run Code Online (Sandbox Code Playgroud)
该文档确认 …
我们正在开发一个将 OAuth 2 用于两个用例的应用程序:
client_credentials)authorization_code,因此将用户重定向到 Keycloak 进行登录,大致配置如教程中所示)。在对用户进行身份验证时,我们从身份验证服务器接收部分信息(例如登录信息),另一部分可以在本地用户表中找到。我们想要做的是创建一个主体对象,其中还包含本地数据库中的数据。
PrimaryExtractor似乎是一条出路。由于我们必须使用手动 OAuth 配置才能不干扰 OAuth 用例 1,因此我们创建它并设置它:
tokenServices.setPrincipalExtractor(ourPrincipalExtractor);
Run Code Online (Sandbox Code Playgroud)
该实现基本上执行数据库查找并在映射函数中返回 CustomUser 对象。现在,虽然这似乎有效(调用提取器),但它没有正确地保留在会话中。因此,在我们的许多 REST 资源中,我们正在注入当前用户:
someRequestHandler(@AuthenticationPrincipal CustomUser activeUser) {
Run Code Online (Sandbox Code Playgroud)
并在那里接收 null 。查看注入的Authentication它表明它是一个OAuth2Authentication对象,具有默认的主体对象(我认为它是一个 Spring User/ UserDetails)。之所以为空,是因为它不是我们CustomUser之前返回的。
我们是否误解了工作方式PrincipalExtractor?这是否是我们的过滤器链配置错误,因为我们在同一个应用程序中有两种不同的 OAuth 机制(如前面提到的)?Spring 的主体存储库中的断点向我们展示了它CustomUser保存在那里,然后使用原始类型进行保存,这似乎覆盖了它。
我有一个带有一些数据库控件的Delphi表单.
为了表示一个日期,我使用了TJvDBDatePickerEdit(来自JCL),它有一个很好的属性
ShowCheckBox := True;
Run Code Online (Sandbox Code Playgroud)
允许用户输入没有已知日期(DBNull).
我验证,使DatePicker归零按预期工作:
procedure Tframe.adoQueryBeforePost(DataSet: TDataSet);
begin
if (qryAuftraege.FieldByName('MyDateField').IsNull) then
begin
ShowMessage('IsNull!');
end;
end;
Run Code Online (Sandbox Code Playgroud)
消息框显示.所以ADO组件应该写的字段是varNull类型.
现在有这个管道:
TADOQuery -> TADOConnection -> MS OLE DB Provider for ODBC Drivers -> MySQL ODBC 5.1 Driver
Run Code Online (Sandbox Code Playgroud)
MySQL ODBC驱动程序现在显示在它的日志中:
UPDATE `db`.`table` SET `MyDateField`=_latin1'0004-00-00' WHERE `ID`=5 AND `MyDateField`=_latin1'2009-06-17';
Run Code Online (Sandbox Code Playgroud)
好吧,日期存储为'0004-00-00'(MySQL似乎保存这样).现在在查询条目时,它被Delphi识别为Null,但是当它下次更新时,调用:
UPDATE `bvl`.`auftraege` SET `MyDateField`=_latin1'2009-06-17' WHERE `ID`=5 AND `MyDateField` IS NULL;
Run Code Online (Sandbox Code Playgroud)
当然失败了,因为MyDateField不是NULL(至少在MySQL DB中).
这个字符串'0004-00-00'来自哪里?如果它是某个地方的错误,我可以在哪里拦截它?
我已经知道有些组件可以提供直接的MySQL连接(我假设)没有显示这种行为.
我们目前遇到在Windows上运行的自编服务器应用程序的问题(在不同版本上发生).服务器侦听TCP端口,接受连接,交换一些数据,然后再次关闭连接.大约有100个客户端不时连接.
有时服务器停止工作:日志文件显示仍然接受连接,但在第一次读取尝试时发生套接字错误(10054 - 由对等方重置连接).我不认为这是一个客户问题,因为它突然停止为所有客户工作.
现在我们发现,我们的旧服务器软件也出现了同样的问题,甚至用另一种编程语言编写.所以它在我们的程序中似乎不是一个错误 - 我认为它必须是某种操作系统/防火墙问题?当然,防火墙已经停用,但尚未解决问题.
任何想法在哪里研究?Wireshark日志即将推出..
摘自日志(时间戳,线程ID,消息)
11:37:56.137 T#3960 Connection from 10.21.13.3
11:37:56.138 T#3960 Client Exception: Socket Error # 10054
Connection reset by peer.
11:37:56.138 T#3960 ClientDisconnected
11:38:00.294 T#4144 Connection from 10.21.13.3
Run Code Online (Sandbox Code Playgroud)
您可以看到异常几乎在接受连接的同时发生,在这种情况下,客户端会在几秒钟后重新连接.
我目前正在调查ASP.NET MVC Web应用程序,据报道该应用程序在负载下性能较差.(但是加载只是每秒几个请求).
我们使用MySQL + NHibernate + Castle ActiveRecord进行映射.NHibernate会话在每个会话开始时打开,并在视图中保持打开状态.
我已经优化了数据访问模式,以避免在可能的情况下选择N + 1问题.
现在我正在考虑的是..在每个请求上打开一个数据库事务并在最后提交.在99%的请求(MVC操作)中,不必将数据写入数据库.