我无法连接到使用 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 或其他错误。浏览器的行为就好像它无法打开到目标端口的连接一样。服务器似乎甚至看不到传入的连接。