我的情况:
我在地址http://0.0.0.0:10004/Service.svc
上有一个WCF服务。使用Interface_1
,Service_1_Class
,ServiceHost_1_Class
。
现在我需要授权的第二版本服务。使用https://0.0.0.0:10004/Service2.svc
,Interface_1
,Service_1_Class
选择地址ServiceHost_2_Class
。
得到错误
HTTP无法注册URL https://+:10004/Service2.svc/
。另一个应用程序已经使用HTTP.SYS注册了此URL。
如果复制粘贴并使用Interface_2
,Service_2_Class
,ServiceHost_2_Class
(具有不同名称的相同类别),一切正常。
不是大问题,但想知道:如何在两个地址上绑定相同的服务类?我可以错过哪一步?即绑定一对一工作,绑定一到两个 - 不,哪里有区别?如果不存在差异(即代码中的问题),我将结束这个问题。
PS:对不起,邮政编码:太大,太复杂,不清楚。问题不是代码,而是概念答案 0 :(得分:0)
根据建议,您需要设置多个服务端点,每个服务端点具有不同的绑定。一个绑定没有启用安全性,另一个绑定启用了安全性。
以下是如何在两个不同端点托管相同服务的工作示例。一个端点根本没有安全性,另一个端点提供基于HTTP的客户端身份验证。
var baseUri = new Uri("http://localhost:10004/");
var serviceHost = new ServiceHost(typeof(HelloWorldService), baseUri);
try
{
var unsecureServiceEndpoint = serviceHost.AddServiceEndpoint(typeof(IHelloWorldService), new WebHttpBinding(), "Service.svc");
unsecureServiceEndpoint.Behaviors.Add(new WebHttpBehavior());
unsecureServiceEndpoint.Name = "UnsecureEndpoint";
var secureBinding = new WebHttpBinding(WebHttpSecurityMode.TransportCredentialOnly);
secureBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
var secureServiceEndpoint = serviceHost.AddServiceEndpoint(typeof(IHelloWorldService), secureBinding, "Service2.svc");
secureServiceEndpoint.Behaviors.Add(new WebHttpBehavior());
secureServiceEndpoint.Name = "SecureEndpoint";
serviceHost.Description.Behaviors.Add(new ServiceMetadataBehavior { HttpGetEnabled = true });
serviceHost.Open();
Console.WriteLine("Hosting - {0} @ {1}", unsecureServiceEndpoint.Name, unsecureServiceEndpoint.Address);
Console.WriteLine("Hosting - {0} @ {1}", secureServiceEndpoint.Name, secureServiceEndpoint.Address);
Console.WriteLine("Press <Enter> to stop the services.");
Console.ReadLine();
serviceHost.Close();
}
catch (CommunicationException ce)
{
Console.WriteLine("An exception occurred: {0}", ce.Message);
serviceHost.Abort();
}