可以在RESTful WCF中为单个操作方法启用https吗? 我已将此服务用于移动应用,因此我不想为整个服务启用https。
对不起我的英文......
答案 0 :(得分:0)
不适用于单个端点。端点的绑定需要决定是使用HTTP还是HTTPS(基于其传输绑定元素)。如果您真的想这样做(并且您可能不需要 - 尝试使用和不使用SSL来分析“大”响应,并且您可能会发现差异不是那么大)您可以定义两个端点,一个端点使用SSL操作,以及其他操作没有SSL的操作,如下例所示:
public class StackOverflow_22865228
{
[ServiceContract]
public interface ISecureOperation
{
[WebGet]
int Add(int x, int y);
}
[ServiceContract]
public interface IInsecureOperations
{
[WebGet]
int Subtract(int x, int y);
[WebGet]
int Multiply(int x, int y);
}
public class Service : ISecureOperation, IInsecureOperations
{
public int Add(int x, int y) { return x + y; }
public int Subtract(int x, int y) { return x - y; }
public int Multiply(int x, int y) { return x * y; }
}
public static void StartService()
{
string baseAddressHttp = "http://localhost:8000/Service";
string baseAddressHttps = "https://localhost:8888/Service";
ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddressHttp), new Uri(baseAddressHttps));
host.AddServiceEndpoint(typeof(ISecureOperation), new WebHttpBinding(WebHttpSecurityMode.Transport), "")
.Behaviors.Add(new WebHttpBehavior());
host.AddServiceEndpoint(typeof(IInsecureOperations), new WebHttpBinding(), "")
.Behaviors.Add(new WebHttpBehavior());
host.Open();
Console.WriteLine("Press ENTER to close");
Console.ReadLine();
host.Close();
}
}