我在IIS中托管了一个WCF服务,其默认的.aspx文件用作clickonce应用程序的登录页面。 .svc文件和.aspx文件位于应用程序的同一根目录中:即以下文件夹结构:
public class MyThread {
public static void main(String[] args) {
final SampleThread sample = new SampleThread();
Thread th = new Thread(sample);
th.start();
Thread th2 = new Thread(sample);
th2.start();
}
}
class SampleThread implements Runnable {
@Override
public void run() {
test();
}
public synchronized void test() {
for (int j = 0; j < 10; j++) {
System.out.println(Thread.currentThread().getId() + "--" + j);
}
}
}
如果我浏览MyService并从IIS查看Default.aspx(我的单击登陆页面),我不希望提示输入客户端证书,因为客户端证书实际上是从直接单击一次并附加到WCF服务的调用(即MyService
-- MyService.svc
-- Default.aspx
-- Web.config
)。
我可以通过将MyService应用程序设置为忽略客户端证书并将MyService.svc设置为接受客户端证书,在IIS管理器中解决此问题。这一切都按预期工作(浏览到Default.aspx并没有提示我,但浏览到.svc确实如此),但是对于部署和放大测试原因,我想在Web.config中自动执行此操作。我试过以下但没有运气。
client.ClientCredentials.ClientCertificate.Certificate = UserCertificate;
<location path="MyService">
<system.webServer>
<security>
<access sslFlags="None" />
</security>
</system.webServer>
我假设将MyService设置为<location path="MyService.svc">
<system.webServer>
<security>
<access sslFlags="SslRequireCert" />
</security>
</system.webServer>
,最初将其搞砸了。
在尝试将我的svc移动到另一个文件夹并将其作为IIS中的子应用程序时,我也遇到了类似的问题。
任何帮助都会很棒,谢谢。
答案 0 :(得分:0)
我最后通过在我的Advanced Installer项目中添加自定义操作来解决此问题,该项目使用
中的内容将XML配置写入ApplicationHost.config using (ServerManager manager = new ServerManager())
{
var config = manager.GetApplicationHostConfiguration();
try
{
ConfigurationSection accessSection = config.GetSection("system.webServer/security/access", site);
if (accessSection != null)
{
Console.WriteLine("Opened app host config successfully.");
accessSection["sslFlags"] = @"None";
}
accessSection = config.GetSection("system.webServer/security/access", "Default Web Site/MyService/MyService.svc");
if (accessSection != null)
{
Console.WriteLine("Opened app host config successfully.");
accessSection["sslFlags"] = @"Ssl, SslNegotiateCert, SslRequireCert";
}
manager.CommitChanges();
Console.WriteLine("Successfully committed changes");
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("Failed to open the app host config.");
}
}