Как опубликовать WSDL для службы WCF 4.0 с конечными точками REST / SOAP - PullRequest
3 голосов
/ 19 августа 2011

Я создаю службу WCF4 с конечными точками REST и SOAP для размещения в IIS 7.5. Я использовал шаблон REST WCF4 в качестве примера. Однако у меня есть несколько вопросов относительно моей настройки.

Вот мой webconfig

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <behaviors>
        <endpointBehaviors>
            <behavior name="REST">
                <webHttp helpEnabled="true"/>
            </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
            <behavior name="MEXGET">
                <serviceMetadata httpGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <services>
        <service behaviorConfiguration="MEXGET" name="Project.WebService.VehicleService">
            <endpoint 
                address="" 
                behaviorConfiguration="REST" 
                binding="webHttpBinding" 
                contract="Project.WebService.IVehicleService" />
            <endpoint 
                address="soap" 
                binding="basicHttpBinding" 
                contract="Project.WebService.IVehicleService" />
            <endpoint 
                address="mex" 
                binding="mexHttpBinding" 
                contract="IMetadataExchange" />
        </service>
    </services>
</system.serviceModel>

Я удалил стандартный раздел «Конечные точки» и добавил свои собственные конечные точки. Там нет файлов .svc, так как я установил маршруты в global.asax, как показано ниже

private void RegisterRoutes()
{
    RouteTable.Routes.Add(new ServiceRoute("VehicleService", new WebServiceHostFactory(), typeof(VehicleService)));
}

Страницы справки доступны через http://localhost:1313/ServiceTest/VehicleService/help

Я также использовал тестовый клиент WCF для доступа к http://localhost:1313/ServiceTest/VehicleService/mex который показывает метаданные для конечной точки SOAP

Но как мне получить WSDL службы?

С файлом svc я могу найти wsdl в http://localhost:1313/ServiceTest/VehicleService.svc?wsdl Однако у меня нет файла .svc. И при этом я не могу найти WSDL в http://localhost:1313/ServiceTest/VehicleService?wsdl или http://localhost:1313/ServiceTest/VehicleService/soap?wsdl

Нужно ли добавлять файл .svc, если я хочу опубликовать WSDL для конечной точки SOAP?

Ответы [ 2 ]

6 голосов
/ 18 октября 2011

Мне удалось заставить WSDL работать на http://localhost:1313/ServiceTest/VehicleService?wsdl. Решение было использовать новый ServiceHostFactory вместо нового WebServiceHostFactory в global.asax. С WebServiceHostFactory вы теряете функциональность WSDL.

Подобный вопрос можно найти здесь: ServiceRoute + WebServiceHostFactory убивает генерацию WSDL? Как создать службу без расширения с помощью? Wsdl

0 голосов
/ 19 августа 2011

Вы должны иметь возможность получить WSDL, используя mex URL непосредственно из браузера:

http://localhost:1313/ServiceTest/VehicleService/mex

WcfTestClient почти наверняка делает это для извлечения WSDL, чтобы он мог сгенерировать прокси для службы.

...