儘管在大多數情況下,我不會混用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