【问题标题】:WCF hosting: Can access svc file but cannot go to wsdl linkWCF 托管:可以访问 svc 文件但无法转到 wsdl 链接
【发布时间】:2010-01-20 09:59:06
【问题描述】:

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

该服务在测试服务器上运行良好,但在生产服务器上出现以下错误。

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


您已经创建了一个服务。

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

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

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


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

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

谢谢你,最好的问候。

【问题讨论】:

  • 您是否配置了 mex 端点?
  • 您的服务前是否有某种路由器/负载均衡器来引入重定向问题?
  • 是的,我使用负载均衡器,我最近的研究表明这些负载均衡器是我问题的根源。谢谢你们的回复。
  • @SelcukSasoglu 嗨,我遇到了同样的问题。您是否必须更改负载平衡器中的任何配置?
  • @DaniloRuziska 是的,正如我所说,我必须更改负载均衡器上的设置,但正如您可以想象的那样,9 年后我不记得我已经更改了什么。对不起。首先尝试从负载均衡器中仅重定向一个服务器,看看它是否有效。这样您可能会发现服务器之间的设置差异。

标签: wcf wsdl


【解决方案1】:

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

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

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

【讨论】:

  • 我对此赞不绝口。我的问题是我有许多使用 WSDL 的服务,但有一个没有。不起作用的需要是“httpsGetEnabled”(带有“s”),而不仅仅是“httpGetEnabled”。
【解决方案2】:

您基本上需要三件事来启用对 WCF 服务的 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>

第 1 点和第 2 点在这里由这条线处理:

<serviceMetadata httpGetEnabled="true" />

您需要在 &lt;service&gt; 标记中引用该服务行为才能使其生效。

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

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

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

【讨论】:

  • 我同意。所有这些配置均已正确设置。我忘了提到一个重要的细节:该服务在我的测试服务器上运行良好,但是当我将服务部署到我的生产服务器时出现了这个错误。很抱歉给您带来不便。
【解决方案3】:

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

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

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

我希望能帮助别人。

【讨论】:

    【解决方案4】:

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

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多