尽管在大多数情况下,我不会混用REST和SOAP端点,但我同意在某些情况下它是必需的。问题的答案是:可以混合使用。有两个选项可以使用:
在Global.asax.cs中的调用,它定义了REST端点
`RouteTable.Routes.Add(new ServiceRoute("Service1", new WebServiceHostFactory(), typeof(Service1)))`
在地址/服务1基本上是定义一个服务的路线。您可以添加一个新的“服务”,使用相同的服务实现的,但使用不同的服务主机工厂(而不是使用WebServiceHostFactory,它定义了一个REST端点,你会用你自己的):
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;
}
}
而且在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)));
}
- 如果你确实想拥有一个“逻辑”的服务有两个端点(我不推荐,因为以前的方法是很简单的),你可以再次创建一个自定义的ServiceHostFactory,然后在该工厂中添加两个端点:一个用于REST(使用WebHttp绑定/ WebHttpBehavior),一个用于SOAP(例如使用BasicHttpBinding)。
您是否曾尝试向该模板添加“正常”服务? – 2011-04-05 13:53:52
您能澄清一下,您是否试图提供2个端点,SOAP和REST,或者您想要一个发送SOAP的RESTful服务?如果你的意思是第一,我的答案就会改变,因为我相信你的意思是第二。 – Aliostad 2011-04-05 15:05:00
我的目标是拥有一个具有2个端点(SOAP和REST)的WCF服务。 – Brandon 2011-04-06 13:25:25