【问题标题】:wsdl not showing XML-WCFwsdl 未显示 XML-WCF
【发布时间】:2020-04-21 18:18:45
【问题描述】:

当调用服务 url https://example.com/TestService.svc 时,我得到以下 2 个 URL,但是当我尝试点击 WSDL 时,它不起作用。

WSDL 网址

http://example.com/TestService.svc?wsdl -- 不工作

http://example.com/TestService.svc?singleWsdl -- 不工作

手动将http改为https

https://example.com/TestService.svc?wsdl -- 工作中

https://example.com/TestService.svc?singleWsdl -- 工作中

客户端配置

  <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
</client>
<behaviors>
  <serviceBehaviors>
    <clear/>
    <behavior>          
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>          
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>    
<serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true" minFreeMemoryPercentageToActivateService="0" />

主要服务配置

<system.serviceModel>    
<behaviors>
  <serviceBehaviors>
    <clear />
    <behavior>
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<protocolMapping>
  <add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true" minFreeMemoryPercentageToActivateService="0">
  <serviceActivations>
    <clear />        
    <add factory="DataServicesHost.UnityServiceHostFactory" relativeAddress="TestService.svc" service="TestService.Service" />
  </serviceActivations>
</serviceHostingEnvironment>     

服务消费

var customHeader = new MessageHeader<Security>(security);
            var tempHeader = customHeader.GetUntypedHeader("Security", "http://tempuri.org/");

            var client = new ServiceClient();

            using (var scope = new OperationContextScope(client.InnerChannel))
            {
                OperationContext.Current.OutgoingMessageHeaders.Add(tempHeader);
                objDataRequest = client.DataRequest("test");

            }

【问题讨论】:

    标签: wcf wsdl


    【解决方案1】:

    从上面的配置,我们可以推断它属于客户端。但是,WCF 服务的 WSDL 功能是在服务器端设置的。它由 ServiceMetadata 部分控制。

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

    因此,如果我们想让 WSDL 特性的 HTTP 协议正常工作,我们需要在服务器端启用它并在服务部分应用服务行为(端点应该在 service 部分内,而不是client 部分)。

    <system.serviceModel>
        <services>
          <service name="WcfService3.Service1" behaviorConfiguration="sb">
            <endpoint address="" binding="basicHttpBinding" contract="WcfService3.IService1"></endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="sb">
              <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
          </serviceBehaviors>
    </behaviors>
    

    如果有什么我可以帮忙的,请随时告诉我。

    【讨论】:

    • 我有托管在另一台服务器上的 svc less 服务,我创建了新服务作为包装器并将服务作为客户端使用。我用主要服务配置设置更新了问题。
    • 尝试去掉服务行为的名称。 此外,当您使用 ServiceActivation 部分发布服务时,请注意您的服务地址。 example.com/TestService.svc?wsdl
    • 我已删除,但无法使用 http wsdl。问题在 https 和 http 之间
    • 为什么在浏览器中导航的是 Service.svc 而不是 TestService.svc?
    • 例如,我没有更改 url,很抱歉错过匹配,只是为了更新.. 当我使用最终用户系统时,wsdl 会自动在 URL 中包含 https,但在本地相同机器然后它没有添加 https
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多