如何在ASP.NET MVC 2应用程序中公开WCF4元数据端点

时间:2010-09-14 20:19:44

标签: .net wcf asp.net-mvc-2 wsdl mex

我有一个ASP.NET MVC 2应用程序,其中定义了WCF服务(.svc文件使用来自不同项目的服务)。 web.config WCF部分如下所示:

<system.serviceModel>
<behaviors>
  <endpointBehaviors>
    <behavior name="RecordServiceAspNetAjaxBehavior">
      <enableWebScript />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="HttpGetEnabledBehaviors" >
      <!-- Add the following element to your service behavior configuration. -->
        <serviceMetadata httpGetEnabled="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
  multipleSiteBindingsEnabled="true" />
<services>
  <service name="RecordService" behaviorConfiguration="HttpGetEnabledBehaviors">
    <endpoint address="" behaviorConfiguration="RecordServiceAspNetAjaxBehavior"
      binding="webHttpBinding" contract="RecordService" />
    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
  </service>
</services>   

问题是在浏览器中打开RecordService.svc之后,我仍然得到“此服务的元数据发布目前已被禁用”。消息...我如何启用wsdl / mex?

3 个答案:

答案 0 :(得分:1)

WebHttpBinding不生成WSDL: http://social.msdn.microsoft.com/forums/en-US/wcf/thread/76757ad7-1877-4f62-b80f-74e577aaeacc

考虑使用BasicHttpBinding添加第二个服务端点,并将其用于WSDL。

答案 1 :(得分:0)

WSDL是SOAP规范的一部分。由于您没有公开为SOAP绑定,因此没有WSDL。你仍然可以使用mexHttpBinding。请阅读this post了解详情。

答案 2 :(得分:0)

根本不使用您的配置。而是使用默认SOAP端点。您看到的页面是基于SOAP的服务的默认页面,它表示您的服务没有打开元数据。但是你不需要基于SOAP的服务。您的配置未定义任何定义REST JSON端点的SOAP端点。原因很可能是第一个端点元素的service元素和contract属性的name属性。您必须使用服务的全名(带名称空间)和合同的全名。检查.svc文件。它应该已经指向来自不同程序集的服务类型。