使用.NET替换Uri的主机部分最好的方法是什么?
即:
string ReplaceHost(string original, string newHostName);
//...
string s = ReplaceHost("http://oldhostname/index.html", "newhostname");
Assert.AreEqual("http://newhostname/index.html", s);
//...
string s = ReplaceHost("http://user:pass@oldhostname/index.html", "newhostname");
Assert.AreEqual("http://user:pass@newhostname/index.html", s);
//...
string s = ReplaceHost("ftp://user:pass@oldhostname", "newhostname");
Assert.AreEqual("ftp://user:pass@newhostname", s);
//etc.
Run Code Online (Sandbox Code Playgroud)
System.Uri似乎没什么帮助.
将路径与文件名组合的最佳方法是什么?
也就是说,给予c:\foo
和bar.txt
,我想要c:\foo\bar.txt
.
鉴于c:\foo
和..\bar.txt
,我想要一个错误或c:\foo\bar.txt
(所以我不能Path.Combine()
直接使用).同样的c:\foo
和bar/baz.txt
,我想要一个错误或c:\foo\baz.txt
(不c:\foo\bar\baz.txt
).
我意识到,我可以检查文件名不包含'\'或'/',但这还够吗?如果没有,那么正确的检查是什么?
我刚刚开始一个需要一些跨平台GUI的新项目,我们选择了Qt作为GUI框架.
我们也需要一个单元测试框架.直到大约一年前,我们使用内部开发的C++单元测试框架 - 项目,但我们现在正在转向使用Google Test进行新项目.
有没有人有使用Google Test for Qt-applications的经验?QtTest/QTestLib是更好的选择吗?
我仍然不确定我们想在项目的非GUI部分使用Qt多少 - 我们可能更喜欢在核心代码中使用STL/Boost,并使用基于Qt的GUI的小接口.
编辑:看起来很多人都倾向于QtTest.是否有任何人有经验将其与连续集成服务器集成?此外,在我看来,必须为每个新测试用例处理单独的应用程序会导致很多摩擦.有什么好方法可以解决这个问题吗?Qt Creator是否有一个处理此类测试用例的好方法,或者您是否需要为每个测试用例创建一个项目?
我们将我们的构建版本化为[major].[minor].[micro].[revision],例如2.1.2.33546.
我们的构建脚本自动更新包含的AssemblyInfo.cs文件
[assembly: AssemblyVersion("x.y.z.w")]
Run Code Online (Sandbox Code Playgroud)
为了在程序集中嵌入版本号.
但我们的Subversion-repository刚刚达到修订版#65535,这打破了我们的构建.
事实证明,版本号中的每个数字的最大值为65534(可能是由于Windows限制).
你遇到过这个问题吗?有什么好的解决方案/解决方法吗?
我们喜欢嵌入修订号的方案,我们显然不能只重置我们的Subversion服务器:-)
它有时希望在等待事件发生时阻塞我的线程.
我通常会这样做:
private AutoResetEvent _autoResetEvent = new AutoResetEvent(false);
private void OnEvent(object sender, EventArgs e){
_autoResetEvent.Set();
}
// ...
button.Click += OnEvent;
try{
_autoResetEvent.WaitOne();
}
finally{
button.Click -= OnEvent;
}
Run Code Online (Sandbox Code Playgroud)
但是,似乎这应该是我可以提取到一个公共类(或者甚至可能已经存在于框架中的东西)的东西.
我希望能够做到这样的事情:
EventWaiter ew = new EventWaiter(button.Click);
ew.WaitOne();
EventWaiter ew2 = new EventWaiter(form.Closing);
ew2.WaitOne();
Run Code Online (Sandbox Code Playgroud)
但我真的找不到构建这样一个类的方法(我找不到一个好的方法来将事件作为参数传递).有人可以帮忙吗?
举一个为什么这个有用的例子,考虑这样的事情:
var status = ShowStatusForm();
status.ShowInsertUsbStick();
bool cancelled = WaitForUsbStickOrCancel();
if(!cancelled){
status.ShowWritingOnUsbStick();
WriteOnUsbStick();
status.AskUserToRemoveUsbStick();
WaitForUsbStickToBeRemoved();
status.ShowFinished();
}else{
status.ShowCancelled();
}
status.WaitUntilUserPressesDone();
Run Code Online (Sandbox Code Playgroud)
这比使用在许多方法之间展开的逻辑编写的等效代码更简洁和可读.但是要实现WaitForUsbStickOrCancel(),WaitForUsbStickToBeRemoved和WaitUntilUserPressesDone()(假设我们在插入或删除usb棒时得到一个事件)我需要每次都重新实现"EventWaiter".当然,你必须要小心,永远不要在GUI线程上运行它,但有时这对于更简单的代码来说是值得的权衡.
替代方案看起来像这样:
var status = ShowStatusForm();
status.ShowInsertUsbStick();
usbHandler.Inserted += OnInserted;
status.Cancel += OnCancel;
//...
void OnInserted(/*..*/){ …
Run Code Online (Sandbox Code Playgroud) 我想发送一个HTTP GET http://example.com/%2F
.我的第一个猜测是这样的:
using (WebClient webClient = new WebClient())
{
webClient.DownloadData("http://example.com/%2F");
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我可以看到实际上在线上发送的是:
GET // HTTP/1.1
Host: example.com
Connection: Keep-Alive
Run Code Online (Sandbox Code Playgroud)
因此http://example.com/%2F在传输之前会被翻译成http://example.com //.
有没有办法实际发送此GET请求?
当使用OCSP over HTTP/GET时,OCSP协议要求发送base-64编码的url编码,因此必须发送实际的%2F而不是'/'才能兼容.
编辑:
以下是OCSP协议标准(RFC 2560附录A.1.1)的相关部分:
使用GET方法的OCSP请求构造如下:
GET {url}/{对OCSPRequest的DER编码的base-64编码的url编码}
我对其他读物非常开放,但我看不出还有什么意思.
使用OS X 10.8的新版本,当您尝试启动已签名的Java小程序时,Gatekeeper将弹出以下警告:
applet已使用有效的代码签名证书进行签名,并且可以在其他平台以及以前版本的OS X上正常运行.如果我将"允许从以下位置下载的应用程序"更改为"Anywhere",则它可以正常工作.
据我所知,"数字签名无法验证",实际上意味着"没有使用Mac开发者ID进行签名".
那么:我可以使用Mac开发者ID签署Java小程序吗?我可以使用Mac开发者ID和标准代码签名证书进行签名吗?有更好的方法吗?
我正在尝试衡量Web服务的吞吐量.
为了做到这一点,我编写了一个小工具,可以连续发送请求并从多个线程中读取响应.
每个线程的内部循环的内容如下所示:
public void PerformRequest()
{
WebRequest webRequest = WebRequest.Create(_uri);
webRequest.ContentType = "application/ocsp-request";
webRequest.Method = "POST";
webRequest.Credentials = _credentials;
webRequest.ContentLength = _request.Length;
((HttpWebRequest)webRequest).KeepAlive = false;
using (Stream st = webRequest.GetRequestStream())
st.Write(_request, 0, _request.Length);
using (HttpWebResponse httpWebResponse = (HttpWebResponse)webRequest.GetResponse())
using (Stream responseStream = httpWebResponse.GetResponseStream())
using (BufferedStream bufferedStream = new BufferedStream(responseStream))
using (BinaryReader reader = new BinaryReader(bufferedStream))
{
if (httpWebResponse.StatusCode != HttpStatusCode.OK)
throw new WebException("Got response status code: " + httpWebResponse.StatusCode);
byte[] response = reader.ReadBytes((int)httpWebResponse.ContentLength);
httpWebResponse.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常,除了似乎有限制工具.如果我使用每40个线程运行该工具的两个实例,那么我获得的吞吐量明显高于具有80个线程的一个实例.
我找到了ServicePointManager.DefaultConnectionLimit属性,我设置为10000(如果我按照Jader …
是否有适用于.NET的非阻塞IO框架?
我正在寻找类似于Apache Mina和JBoss Netty为Java提供的东西:一个用于实现高度可伸缩服务器的框架 - 而不仅仅是.NET框架提供的低级支持.
编辑:为了更好地解释我想看到的内容,这里有一个基本的例子,你可以用Mina做什么:
在Mina我可以实现这样的ProtocolDecoder:
public class SimpleDecoder extends CumulativeProtocolDecoder {
protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
if (in.remaining() < 4)
return false;
int length = in.getInt();
if(in.remaining() < 4 + length)
return false;
Command command = new Command(in.asInputStream());
out.write(command);
}
}
Run Code Online (Sandbox Code Playgroud)
像这样的CommandHandler:
public abstract class CommandHandler extends IoHandlerAdapter{
public void messageReceived(IoSession session, Object message) throws IOException, CloneNotSupportedException {
Command command = (Command) message;
// Handle command. …
Run Code Online (Sandbox Code Playgroud) 我想获得有效的屏幕尺寸.即:没有任务栏的屏幕大小(或Linux/Mac上的等效项).
我目前正在使用......
component.getGraphicsConfiguration().getBounds()
Run Code Online (Sandbox Code Playgroud)
...并根据操作系统减去默认任务栏大小,但我希望这种方法即使用户已调整大小/移动任务栏也能正常工作.
.net ×7
c# ×7
java ×2
applet ×1
awt ×1
base64 ×1
code-signing ×1
events ×1
filenames ×1
frameworks ×1
googletest ×1
http ×1
nio ×1
path ×1
qt ×1
qtestlib ×1
qttest ×1
svn ×1
swing ×1
unit-testing ×1
uri ×1
url-encoding ×1