如何使用REST / SOAP端点发布WCF 4.0服务的WSDL

时间:2011-08-19 09:30:34

标签: wcf web-services rest soap wsdl

我正在创建一个WCF4服务,其REST和SOAP端点将在IIS 7.5中托管。 我以WCF4 REST模板为例。 但是到目前为止我对我的设置有几个问题。

这是我的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>

我删除了standardEndpoints部分并添加了自己的端点。 没有.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文件,我可以在http://localhost:1313/ServiceTest/VehicleService.svc?wsdl找到wsdl但是我没有.svc文件。 我也无法在http://localhost:1313/ServiceTest/VehicleService?wsdlhttp://localhost:1313/ServiceTest/VehicleService/soap?wsdl

找到WSDL

如果我想为SOAP端点发布WSDL,是否需要添加.svc文件?

2 个答案:

答案 0 :(得分:6)

我设法让WSDL在http://localhost:1313/ServiceTest/VehicleService?wsdl工作。 解决方案是在global.asax中使用新的ServiceHostFactory而不是新的WebServiceHostFactory。 使用WebServiceHostFactory,您将失去WSDL功能。

类似的问题可以在这里找到: ServiceRoute + WebServiceHostFactory kills WSDL generation? How to create extensionless WCF service with ?wsdl

答案 1 :(得分:0)

您应该可以直接从浏览器使用mex URL来获取WSDL:

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

WcfTestClient几乎肯定会这样做来检索WSDL,因此它可以生成服务的代理。