我有一个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?
答案 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文件。它应该已经指向来自不同程序集的服务类型。