WSDL не показывает XML -WCF - PullRequest
       11

WSDL не показывает XML -WCF

0 голосов
/ 21 апреля 2020

При вызове службы URL https://example.com/TestService.svc я получаю 2 указанных ниже URL, но когда я пытаюсь нажать на WSDL, он не работает.

WSDL URL

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" />

Main Service Config

<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");

            }

1 Ответ

0 голосов
/ 22 апреля 2020

Из приведенной выше конфигурации мы можем сделать вывод, что она принадлежит клиентской стороне. Однако функция WSDL службы WCF настраивается на стороне сервера. Он управляется разделом ServiceMetadata.

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

Поэтому, если мы хотим, чтобы протокол HTTP WSDL работал, нам нужно включить его на стороне сервера и применить поведение службы в службе. раздел (конечная точка должна находиться в разделе 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>

Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...