Aunque en la mayoría de los casos no mezclaría los puntos finales REST y SOAP, pero acepto que en ciertos casos es necesario. La respuesta a la pregunta: sí, es posible mezclarlos. Hay dos opciones que puede utilizar:
La llamada en Global.asax.cs que define la ruta para el extremo REST
`RouteTable.Routes.Add(new ServiceRoute("Service1", new WebServiceHostFactory(), typeof(Service1)))`
define esencialmente un servicio a la dirección/Servicio1. Puede agregar un nuevo "servicio", utilizando la misma aplicación de servicio, pero el uso de una fábrica de host diferente de servicio (en lugar de utilizar WebServiceHostFactory, que define un extremo REST, que tendría que utilizar su propio):
public class SoapServiceHostFactory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
ServiceHost host = base.CreateServiceHost(serviceType, baseAddresses);
ServiceMetadataBehavior smb = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (smb == null)
{
smb = new ServiceMetadataBehavior();
host.Description.Behaviors.Add(smb);
}
smb.HttpGetEnabled = true;
host.AddServiceEndpoint(serviceType, new BasicHttpBinding(), "soap");
return host;
}
}
Y en global.asax.cs, RegisterRoutes:
private void RegisterRoutes()
{
// Edit the base address of Service1 by replacing the "Service1" string below
RouteTable.Routes.Add(new ServiceRoute("Service1", new WebServiceHostFactory(), typeof(Service1)));
RouteTable.Routes.Add(new ServiceRoute("SoapService", new SoapServiceHostFactory(), typeof(Service1)));
}
- Si realmente quiere tener un servicio de "lógica" con dos puntos finales (que no recomendaría, ya que el enfoque anterior es bastante simple), puede vuelva a crear un ServiceHostFactory personalizado, luego en esa fábrica agregaría dos puntos finales: uno para REST (usando WebHttp) Binding/WebHttpBehavior), y uno para SOAP (utilizando BasicHttpBinding, por ejemplo).
¿Has intentado agregar un servicio "normal" a esa plantilla? –
¿Puedes aclarar que estás tratando de proporcionar 2 puntos finales, SOAP y REST o quieres un servicio RESTful que envíe SOAP? Mi respuesta cambiaría si te refieres a la primera porque creo que te refieres a la segunda. – Aliostad
Mi objetivo es tener un solo servicio WCF que tenga 2 puntos finales, SOAP y REST. – Brandon