如何在代码而不是配置中创建WCF EndPointBehaviors?

如何在代码而不是配置中创建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()); 

这两种方式应该带你到你目标,我希望! (或至少让你更接近:-)

+3

WebServiceHost工作。非常感谢!!! – 2010-01-26 21:49:48

+2

我想添加行为restSEP.Behaviors.Add(新的WebHttpBehavior());'它的工作!谢谢! – 2013-07-24 15:53:30