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

Sel*_*glu 18 wcf wsdl

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

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

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


您已创建了一项服务.

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

svcutil.exe http://..../service.svc?wsdl
Run Code Online (Sandbox Code Playgroud)

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


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

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

谢谢您最好的问候.

小智 18

有同样的问题.我通过将httpsGetEnabled添加到serviceBehaviors>行为来修复它,如下所示:

<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
Run Code Online (Sandbox Code Playgroud)

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

  • 我不能对此表示足够的赞同。我的问题是我有许多使用WSDL的服务,而没有一个。无效的地址必须是“ http ** s ** GetEnabled”(带有“ s”),而不是“ httpGetEnabled”。 (2认同)

mar*_*c_s 15

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

  1. 支持服务元数据的服务行为
  2. 在该服务元数据行为上设置httpGetEnabled = True,以允许http浏览到该元数据
  3. 服务的mex端点

所以你在服务器端的配置可能看起来像这样(加上一些东西):

  <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>
Run Code Online (Sandbox Code Playgroud)

点1和2由此处处理:

<serviceMetadata httpGetEnabled="true" />
Run Code Online (Sandbox Code Playgroud)

您需要在标记中引用该服务行为<service>才能使其变为活动状态.

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

<endpoint address="mex" 
          binding="mexHttpBinding" 
          contract="IMetadataExchange" />
Run Code Online (Sandbox Code Playgroud)

对于http,使用mexHttpBinding,和IMetadataExchange合同是用于元数据交换的WCF系统合同.