WCF和IIS 6 - WSDL未公开

时间:2009-08-04 12:23:30

标签: wcf iis iis-6 wsdl

我开发了一个包含WCF服务的ASP.NET应用程序。此服务需要由第三方应用程序使用。在我的开发环境中进行测试时,此服务运行良好。我的开发环境在Window 7 RC 1上使用IIS 7.0。但是,一旦它在我的登台/生产环境中,我就无法使用该服务。我的暂存/生产环境是Windows Server 2003,IIS 6环境。

当我尝试在IIS 6环境中引用该服务时,我收到一条错误消息:

错误:无法获取元数据 ...

有趣的是,我注意到了一个微妙的,但我认为在测试舞台/制作环境时有重要的区别。

在我的测试环境中,我注意到我可以使用以下模板通过网址访问“服务”页面:

http://localhost/MyApp/services/myService.svc

我还注意到,在我的测试环境中,如果我使用以下模板访问网址,我可以看到WSDL信息:

http://localhost/MyApp/services/myService.svc?wsdl

但是,在我的临时/生产环境中,我看不到WSDL信息。奇怪的是,我可以看到服务页面。

以下是与我的生产环境中的服务相关的配置设置。

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="myServiceBehavior">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="false" />
      </behavior>
    </serviceBehaviors>
  </behaviors>

  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
  <services>
    <service behaviorConfiguration="myServiceBehavior" name="myService">
      <endpoint address="" binding="basicHttpBinding" contract="myService" />
      <endpoint address="mex" binding="mexHttpBinding" 
        contract="IMetadataExchange" />
    </service>
  </services>
</system.serviceModel>

为什么我能够在Windows Server 2003 IIS 6.0环境中看到Service页面而不是WSDL页面?

谢谢!

2 个答案:

答案 0 :(得分:2)

您是否启用了元数据交换?

    <serviceMetadata httpGetEnabled = "true"/>

您是否定义了元数据交换端点

    <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
      name="mexendpoint" contract="IMetadataExchange" />

答案 1 :(得分:1)

要添加到Shiraz's答案,以下MSDN文章将详细介绍发布服务元数据:

  

Publishing Metadata Endpoints (MSDN Library)