我开发了一个包含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页面?
谢谢!
答案 0 :(得分:2)
您是否启用了元数据交换?
<serviceMetadata httpGetEnabled = "true"/>
您是否定义了元数据交换端点
<endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
name="mexendpoint" contract="IMetadataExchange" />
答案 1 :(得分:1)
要添加到Shiraz's答案,以下MSDN文章将详细介绍发布服务元数据: