簡體   English   中英

如何在代碼而不是配置中創建WCF EndPointBehaviors?

[英]How do I create WCF EndPointBehaviors in Code rather than the configuration?

我有以下Xml配置

<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執行REST時,您可以在config中使用<webHttp>行為,也可以使用WebServiceHost類(而不是“普通的vanilla” 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");

您擁有的另一個選項是將服務端點添加到常規服務主機,並在該端點上配置Web http行為 - 端點(和服務)行為只是常規.NET類,畢竟,您可以實例化,以及添加到相應的Behaviors集合(在服務或單個端點上):

WebHttpBinding restBinding = new WebHttpBinding();

ServiceEndpoint restSEP = 
    serviceHost.AddServiceEndpoint(typeof(MyService.IMyService), 
                                   restBinding, "rest");
restSEP.Behaviors.Add(new WebHttpBehavior());

我希望這兩種方式都能帶給你你的目標! (或者至少讓你離得更近:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM