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、またはその他のエラーはありません。ブラウザは、ターゲット ポートへの接続を開くことができないかのように動作します。サーバーは着信接続を認識していないようです。