我正在构建一个ASP.NET MVC站点,我想使用DotNetOpenAuth来实现OpenID登录(我完全放弃了基于用户名/密码的登录).
到目前为止,我一直在使用角色系统,配置文件系统和基本注册系统,使用ASP.NET成员资格提供程序编写默认用户名/密码系统的代码.现在,在我迁移到OpenID时,我预见到了一些问题,特别是与ASP.NET成员资格提供程序提供的成员控制接口.
看看DotNetOpenAuth MVC示例,我看到对FormsAuthentication系统的唯一引用是创建一个AuthCookie以后再调用FormsAuthentication.SignOut().因此,我不确定是否可以在此OpenID系统中使用ASP.NET成员资格提供程序函数,尽管示例代码调用的另一部分User.Identity.IsAuthenticated.
这个OpenID系统是否会与ASP.NET Membership Provider接口?如果没有,我能以某种方式解决这个问题吗?
如果以上是完全不可能的,我认为我的下一步行动就是滚动我自己的数据库表并手动编写代码以便从我的帐户控制器中使用它们.我注意到Stack Exchange Data Explorer采用了这种方法,但这是正确的做法吗?
编辑:只是为了确保我使用正确的术语,"ASP.NET成员资格提供程序",我指的是使用该aspnet_regsql.exe工具生成的表的提供程序.
我有一个WCF Web服务,可以将文件保存到一个文件夹(大约200,000个小文件).之后,我需要将它们移动到另一台服务器.
我发现的解决方案是拉链然后移动它们.
当我采用这个解决方案时,我已经用(20,000个文件)进行了测试,压缩20,000个文件只需要大约2分钟,并且移动zip非常快.但在生产中,压缩200,000个文件需要2个多小时.
这是我压缩文件夹的代码:
using (ZipFile zipFile = new ZipFile())
{
zipFile.UseZip64WhenSaving = Zip64Option.Always;
zipFile.CompressionLevel = CompressionLevel.None;
zipFile.AddDirectory(this.SourceDirectory.FullName, string.Empty);
zipFile.Save(DestinationCurrentFileInfo.FullName);
}
Run Code Online (Sandbox Code Playgroud)
我想修改WCF Web服务,以便保存到zip文件而不是保存到文件夹.
我使用以下代码进行测试:
var listAes = Directory.EnumerateFiles(myFolder, "*.*", SearchOption.AllDirectories).Where(s => s.EndsWith(".aes")).Select(f => new FileInfo(f));
foreach (var additionFile in listAes)
{
using (var zip = ZipFile.Read(nameOfExistingZip))
{
zip.CompressionLevel = Ionic.Zlib.CompressionLevel.None;
zip.AddFile(additionFile.FullName);
zip.Save();
}
file.WriteLine("Delay for adding a file : " + sw.Elapsed.TotalMilliseconds);
sw.Restart();
}
Run Code Online (Sandbox Code Playgroud)
添加到zip的第一个文件只需5毫秒,但要添加的第10,000个文件需要800毫秒.
有没有办法优化这个?或者,如果您有其他建议?
编辑
上面显示的示例仅用于测试,在WCF Web服务中,我将有不同的请求发送我需要添加到Zip文件的文件.由于WCF是无规则的,每次调用我都会有一个新类的实例,那么如何保持Zip文件打开以添加更多文件?
我已经阅读了很多关于此的帖子,但我仍然无法得到它.我正在运行此脚本作为管理员,它确实创建了所需的文件夹,只是没有设置适当的权限.任何帮助,将不胜感激.谢谢!
$Users = Get-Content "D:\New_Users.txt"
ForEach ($user in $users)
{
$newPath = Join-Path "F:\Users" -childpath $user
New-Item $newPath -type directory
$UserObj = New-Object System.Security.Principal.NTAccount("DOMAIN",$user)
$acl = Get-Acl $newpath
$acl.SetAccessRuleProtection($True, $False)
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("O1OAK\$user","AppendData,CreateDirectories,CreateFiles,DeleteSubdirectoriesAndFiles,ExecuteFile,ListDirectory,Modify,Read,ReadAndExecute,ReadAttributes,ReadData,ReadExtendedAttributes,ReadPermissions,Synchronize,Traverse,Write,WriteAttributes,WriteData,WriteExtendedAttributes","ContainerInherit, ObjectInherit","None","Allow")
$acl.SetAccessRule($accessRule)
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("NT AUTHORITY\SYSTEM","FullControl","ContainerInherit, ObjectInherit","None","Allow")
$acl.SetAccessRule($accessRule)
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("BUILTIN\Administrators","FullControl","ContainerInherit, ObjectInherit","None","Allow")
$acl.SetAccessRule($accessRule)
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("1OAK\$user","Delete","ContainerInherit, ObjectInherit","None","Allow")
$acl.removeAccessRule($accessRule)
$acl.SetOwner($UserObj)
$acl | Set-Acl $newpath
}
Run Code Online (Sandbox Code Playgroud)
我得到的3个字符串中的第一个错误如下.我认为这是最重要的,并将修复其他2.
Exception calling "SetAccessRule" with "1" argument(s): "Some or all identity references could not be translated."
At D:\DOMAIN\IT\IT Private\User …Run Code Online (Sandbox Code Playgroud) 当我编译一个wix项目,并且wix通过所有现有项目的MSbuild启动编译时,我可以使用"Any CPU"而不是"X86"或"64 bit"吗?
如果没有,我如何使用"任何CPU"编译项目?
我需要解析IIS日志文件.是否有LogParser的替代方法,一个查询日志文件的简单类?
我只需要知道我在2个日期之间收到了多少请求.
以下是iis日志文件的示例:
#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2014-08-26 12:20:57
#Fields: date time s-sitename s-computername s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs-version cs(User-Agent) cs(Cookie) cs(Referer) cs-host sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken
2014-08-26 12:20:57 W3SVC1 QXXXSXXXX 172.25.161.53 POST /XXXX/XXX/XXXX/XXXXX/1.0/XXXX/XXXXXXXX/xxxxxx.svc - 443 - 999.99.999.999 HTTP/1.1 - - - xxxx.xxxx.xxx.xxx.xxxx.xxxx.xxx.com 200 0 0 4302 5562 1560
Run Code Online (Sandbox Code Playgroud) 我正在使用PHP,我使用与PHP捆绑在一起的SOAP类.我整天都在努力弄清楚为什么这不起作用.
我在客户端写了这个:
$client = new SoapClient("Audit.wsdl");
$params=array('SerialNumber'=>'PB4LAX6JLJT7M','PercentProgress'=>'50','ResultID'=>'5');
$result=$client->__soapCall('HardDriveStatusUpdate',array($params));
Run Code Online (Sandbox Code Playgroud)
然后我在服务器端写了这个:
function HardDriveStatusUpdate($sn, $p, $rs)
{
$serialNumber=$sn->SerialNumber;
$percentProgress=$p->PercentProgress;
$resultID=$rs->ResultID;
// process with variables
return array('HardDriveStatusUpdateResult' => '$result');
}
$server=new SoapServer('Audit.wsdl');
$server->addFunction('HardDriveStatusUpdate');
$server->handle();
Run Code Online (Sandbox Code Playgroud)
我注意到什么都没发生.为了调试,我有一个函数用"$ serialNumber,$ percentProgress,$ resultID"写入文件.事实证明它只获得了第一个参数,但第二个和第三个参数是空的.(它显示"PB4LAX6JLJT7M ,,")为什么?
WSDL说:
<s:element name="HardDriveStatusUpdate">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="SerialNumber" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="PercentProgress" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="ResultID" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
Run Code Online (Sandbox Code Playgroud)
我如何构造参数有什么问题吗?
使用__getLastRequest()进行测试:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://127.0.0.1/soap/">
<SOAP-ENV:Body>
<ns1:HardDriveStatusUpdate>
<ns1:SerialNumber>PB4LAX6JLJT7M</ns1:SerialNumber>
<ns1:PercentProgress>50</ns1:PercentProgress>
<ns1:ResultID>5</ns1:ResultID>
</ns1:HardDriveStatusUpdate>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)
真正的问题绝对是服务器端.即使所有参数都已在SOAP请求中发送,该函数也不会获取参数.这是为什么?我尝试了另一种方法,它仍然无法获得第二个参数.它只适用于FIRST参数.
对于搜索功能,我编写了一个由PHP脚本执行的MySQL查询.我没有进行全文搜索.相反,我正在使用以下方法进行搜索:
... WHERE field LIKE '%etc%' AND field REGEXP '[[:<:]]etc[[:>:]]'
现在,我的想法是在PHP中准备这些动态值,例如:
$word = '2*3%5_1^0'; // just an example
$wordLike = strtr($word,array('\\'=>'\\\\','%'=>'\\%','_'=>'\\_'));
// instead of my old solution:
// $wordLike = preg_replace('~([%_])~', '\\\\$1', $word);
$wordLike = $db_con->escape('%' . $wordLike . '%');
$spaces = '[[:blank:]]|[[:punct:]]|[[:space:]]';
// I'm not sure about the difference between blank & space, though
$wordRX = preg_quote($word);
$wordRX = $db_con->escape('(^|'.$spaces.')'.$wordRX.'($|'.$spaces.')');
// instead of my old solution:
// $wordRX = $db_con->escape('[[:<:]]' . $wordRX . '[[:>:]]');
Run Code Online (Sandbox Code Playgroud)
然后使用这些值,如...
... WHERE field LIKE …
在经典的asp失败中,IsNumeric函数有一个非常奇怪的问题.这样的事情发生在我的代码中:
Response.write Score // 79.617
Response.write IsNumeric(Score) // false
Response.write IsNumeric("79.617") // true
Run Code Online (Sandbox Code Playgroud)
有没有人知道为什么会发生这种情况?
在规范中,据说这些函数适用于可以转换为数字的字符串,从上面的例子可以看出我得到"真实"的结果.但是什么可以导致我的问题呢?
如何检测当前是否正在按任何键盘键?我对关键是什么不感兴趣,我只是想知道是否仍然按下了任何键.
if (Keyboard.IsKeyDown(Key.ANYKEY??)
{
}
Run Code Online (Sandbox Code Playgroud) c# ×4
php ×2
asp-classic ×1
asp.net-mvc ×1
c#-4.0 ×1
compilation ×1
dotnetzip ×1
escaping ×1
iis-logs ×1
isnumeric ×1
mathjax ×1
mysql ×1
openid ×1
parsing ×1
performance ×1
powershell ×1
soap ×1
tx ×1
user-input ×1
wcf ×1
windows ×1
wix ×1
wpf ×1