【发布时间】:2013-01-14 23:18:43
【问题描述】:
我无法连接到使用 WebHttp+HTTPS 绑定运行的自托管 WCF 服务。由于各种原因,我完全在代码中配置服务,而不是使用配置文件,并以这种方式实例化服务:
private ServiceHost CreateService()
{
Type myServiceType = typeof(MyService);
ServiceHost myService = new ServiceHost(myServiceType, new Uri(Constants.ServiceAddress));
ContractDescription contract = ContractDescription.GetContract(myServiceType);
WebHttpBinding httpsBinding = new WebHttpBinding(WebHttpSecurityMode.Transport);
httpsBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
ServiceEndpoint endpoint = myService.AddServiceEndpoint(myServiceType, httpsBinding, "MyService.svc");
endpoint.Behaviors.Add(new WebHttpBehavior());
ServiceMetadataBehavior metadataBehavior = new ServiceMetadataBehavior();
metadataBehavior.HttpGetEnabled = true;
metadataBehavior.HttpsGetEnabled = true;
myService.Description.Behaviors.Add(metadataBehavior);
myService.Credentials.ServiceCertificate.SetCertificate(
StoreLocation.LocalMachine,
StoreName.My,
X509FindType.FindByThumbprint,
Constants.CertThumbprint);
return myService;
}
当我运行这段代码时,服务被实例化并启动,没有错误。当我在代码中查询该服务时,该服务声称已打开,netstat 表明有人正在侦听相应的端口。我有一个防火墙例外,它允许此端口上的传入连接。
但是,如果我尝试在浏览器或客户端中打开服务端点地址,连接会立即失败。任何线索为什么?有没有忘记服务主机或者环境的配置?
编辑:
没有要报告的错误消息——没有 404、500 或其他错误。浏览器的行为就好像它无法打开到目标端口的连接一样。服务器似乎甚至没有看到传入的连接。
【问题讨论】:
-
你得到了什么错误信息?
-
服务主机运行的是什么用户上下文,可能是访问X509证书的权限问题
-
你试过客户端的fiddler吗?
标签: wcf https self-hosting