0

我有一个 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?

4

3 回答 3

1

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

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

于 2010-09-14T20:30:01.337 回答
0

WSDL 是 SOAP 规范的一部分。由于您不公开为 SOAP 绑定,因此没有 WSDL。你仍然可以使用mexHttpBinding。阅读这篇文章了解更多信息。

于 2010-09-14T20:37:08.140 回答
0

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

于 2010-09-14T20:38:55.243 回答