Как я создаю WCF EndPointBehaviors в Коде, а не конфигурации?

У меня есть следующая конфигурация 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# вместо того, чтобы использовать конфигурацию.

Я не могу выяснить, кто сделать EndPoint с webHttp для представления этого сервиса как сервис 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");
23
задан David Basarab 26 January 2010 в 21:18
поделиться

1 ответ

Как правило, при отдыхе с WCF вы можете либо использовать поведение в Config, либо можно использовать класс WebserviceHost Вместо «простого ванили» ServiceShost ). Используя WebServiceHost WebserviceHost , включает в себя все необходимые настройки и биты и куски, чтобы сделать рабочую силу остальных - больше не требуется поведение WebHTTP.

Конечно, это означает, что вам нужен отдельный WebserviceHost System.servicemodel.WEB ), который проводит услугу как отдохнуть исключительно. Это может быть или не может быть, что вы ищете:

WebServiceHost webServiceHost = 
    new WebServiceHost(singletonInstance, "http://localhost:1234/MyService/xml");

WebHttpBinding webBinding = new WebHttpBinding();
webServiceHost.AddServiceEndpoint(typeof(MyService.IMyService), webBinding, "rest");

Другой вариант, который у вас есть, это добавить конечную точку обслуживания на ваш регулярный хост обслуживания, и просто настройте поведение веб-сайта на этой конечной точке - Endpoint (и Service) поведение В конце концов, являются просто обычными классами .NET, которые вы можете создать и добавлять в соответствующую коллекцию (на сервисе или на индивидуальную конечную точку):

WebHttpBinding restBinding = new WebHttpBinding();

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

Обе пути должны принести вам свою цель, Я надеюсь! (или, по крайней мере, получите ближе: -)

40
ответ дан 29 November 2019 в 02:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: