如何在代码而不是配置中创建WCF EndPointBehaviors?
问题描述:
我有以下XML配置如何在代码而不是配置中创建WCF EndPointBehaviors?
<system.serviceModel>
<services>
<service name="MyService.MyServiceREST" behaviorConfiguration="MyServiceTypeBehaviors">
<host>
<baseAddresses>
<add baseAddress="http://localhost:1234/MyService/xml"/>
</baseAddresses>
</host>
<endpoint address="" binding="webHttpBinding" behaviorConfiguration="xmlBehavior" contract="MyService.IMyService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceTypeBehaviors" >
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="True"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="xmlBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
我想在C#代码来实现,而不是使用的配置。
我找不出谁来用webHttp做EndPoint以将此服务公开为REST服务。
ServiceHost serviceHost = new ServiceHost(singletonInstance, "http://localhost:1234/MyService/xml");
// Create Meta Behavior
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
behavior.HttpGetEnabled = true;
serviceHost.Description.Behaviors.Add(behavior);
Binding mexBinding = MetadataExchangeBindings.CreateMexHttpBinding();
serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), mexBinding, "mex");
WSHttpBinding httpBinding = new WSHttpBinding(SecurityMode.None);
serviceHost.AddServiceEndpoint(typeof(MyService.IMyService), httpBinding, "rest");
答
通常情况下,与WCF做休息的时候,你可以使用<webHttp>
行为的配置,或者您可以使用WebServiceHost
类(而不是“普通的香草” ServiceHost
)。使用WebServiceHost
包括所有必要的调整和零件以使REST工作正常 - 不再需要webHttp行为。
当然,这意味着,你需要一个单独的WebServiceHost
(在System.ServiceModel.Web
),排它承载的服务为REST。这可能是也可能不是你要找的内容:
WebServiceHost webServiceHost =
new WebServiceHost(singletonInstance, "http://localhost:1234/MyService/xml");
WebHttpBinding webBinding = new WebHttpBinding();
webServiceHost.AddServiceEndpoint(typeof(MyService.IMyService), webBinding, "rest");
你有另一种选择是一个服务端点添加到您的定期服务的主机,只是配置上的端点的网络行为HTTP - 终点(和服务)的行为都只是普通的.NET类的,毕竟,你可以实例,并添加到相应的Behaviors
集合(该服务或单个端点):
WebHttpBinding restBinding = new WebHttpBinding();
ServiceEndpoint restSEP =
serviceHost.AddServiceEndpoint(typeof(MyService.IMyService),
restBinding, "rest");
restSEP.Behaviors.Add(new WebHttpBehavior());
这两种方式应该带你到你目标,我希望! (或至少让你更接近:-)
WebServiceHost工作。非常感谢!!! – 2010-01-26 21:49:48
我想添加行为restSEP.Behaviors.Add(新的WebHttpBehavior());'它的工作!谢谢! – 2013-07-24 15:53:30