WCF托管:可以访问svc文件但不能转到wsdl链接

时间:2010-01-20 09:59:06

标签: wcf wsdl

我有一个在IIS 7.5中托管的WCF服务。 我有两台服务器,一台用于测试,另一台用于生产。

该服务在测试服务器上运行正常,但在生产服务器上我有以下错误。

当我访问地址http://..../service.svc时,我可以看到默认页面:


您已创建了一项服务。

要测试此服务,您需要创建一个客户端并使用它来调用该服务。您可以使用命令行中的svcutil.exe工具执行此操作,语法如下:

svcutil.exe http://..../service.svc?wsdl

这将生成包含客户端类的配置文件和代码文件。将这两个文件添加到客户端应用程序,并使用生成的客户端类来调用服务。


但是当我点击wsdl链接时,我无法访问wsdl页面。它将我返回到此默认网页,没有任何错误。我怀疑网络/防火墙授权错误,但有人有这样的经历吗?

测试和生产服务器的所有IIS设置都相同。

谢谢你,最诚挚的问候。

4 个答案:

答案 0 :(得分:15)

有同样的问题。我通过将httpsGetEnabled添加到serviceBehaviors>这样的行为来修复它:

<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>

也许它可以帮助别人。不要以为你需要这个提示4年后=)

答案 1 :(得分:14)

您基本上需要三件事来支持浏览WDL服务的WSDL:

  1. 启用服务元数据的服务行为
  2. 在该服务元数据行为上设置httpGetEnabled = True以允许http浏览到该元数据
  3. 您服务的mex端点
  4. 因此,服务器端的配置可能看起来像这样(加上更多东西):

      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior name="MetadataBehavior">
              <serviceMetadata httpGetEnabled="true" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
    
        <services>
          <service behaviorConfiguration="MetadataBehavior" name="YourService">
            <endpoint address="" 
                      binding="basicHttpBinding" 
                      contract="IYourService" />
            <endpoint address="mex" 
                      binding="mexHttpBinding" 
                      contract="IMetadataExchange" />
          </service>
        </services>
      </system.serviceModel>
    

    点1和2由此处处理:

    <serviceMetadata httpGetEnabled="true" />
    

    您需要在<service>标记中引用该服务行为才能使其生效。

    点3(MEX端点)是此部分:

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

    对于http,请使用mexHttpBindingIMetadataExchange合同是用于元数据交换的WCF系统合同。

答案 2 :(得分:2)

我知道答案已经很晚了,但我遇到了同样的问题,解决方案是:

在服务[ServiceContract]上实施的界面上添加标记[OperationContract].svc。当您选择WCF Service但我删除了界面并创建了自己的界面时,Visual Studio会创建界面。

[ServiceContract]
public interface IService1
{
    [OperationContract]
    void DoWork();
}

我希望能帮助别人。

答案 3 :(得分:-1)

是的,问题在于发布元数据。只需添加一个提示。您还可以使用代码添加服务元数据,如下所示:

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;

host.Description.Behaviors.Add(smb);

此处有更多详情: http://msdn.microsoft.com/en-us/library/aa738489%28v=vs.110%29.aspx