Веб-служба WCF, размещенная на IIS, возвращает пустой XML-ответ - PullRequest
0 голосов
/ 08 июля 2019

Я создал службу wcf rest, которая размещена в среде сервера окон IIS. Когда я пытаюсь получить доступ к сервису (http://localhost:8081/Service1.svc/EmployeeDump) из IIS, он возвращает пустой XML-ответ. Он не выдает никакой ошибки, возвращается только пустой XML-файл. Однако файл wsdl (метаданных) службы доступен из браузера. Служба работает нормально, когда я запускаю его в Visual Studio, а методы конечных точек возвращают ответ на данные в формате XML, но когда я размещаю ту же службу на сервере IIS, он возвращает пустой ответ, я не знаю, почему.

Я попытался установить функцию HTTP Activation из диспетчера сервера и попытался изменить параметры веб-конфигурации, такие как добавление опции хоста, но все еще проблема.

Ниже моя веб-конфигурация:

<?xml version="1.0"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
  </configSections>
  <connectionStrings>
    <add name="MyDB"connectionString="server=xyz\abc;database=testDB;Integrated Security = SSPI;"/>
  </connectionStrings>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/>
  </appSettings>
  <system.web>
    <compilation targetFramework="4.6.1" debug="true"/>
    <httpRuntime targetFramework="4.6.1"/>
  </system.web>
  <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="webHttpTransportSecurity">
          <security mode="Transport">
            <transport clientCredentialType="None"/>
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
    <services>
      <service name="MasterDumpService.Service1" behaviorConfiguration="myServiceBehavior">
        <endpoint address="" binding="webHttpBinding" behaviorConfiguration="webBehavior" contract="MasterDumpService.IService1"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8081/"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="myServiceBehavior">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="MasterDumpService.ServiceAuthenticator, MasterDumpService"/>
          </serviceCredentials>
        </behavior>
        <behavior>
          <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="webBehavior">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <protocolMapping>
      <add binding="basicHttpsBinding" scheme="https"/>
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb"/>
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
    </providers>
  </entityFramework>
</configuration>

Ниже приведен пустой XML-ответ, который я получаю от службы, размещенной на IIS:

<?xml version="1.0"?>
<ArrayOfEmployeeDump xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MasterDumpService"/>

Ниже приведен правильный ответ xml (который на самом деле должен возвращать размещенный сервис) при запуске сервиса из Visual Studio в браузере:

<?xml version="1.0"?>

-<ArrayOfEmployeeDump xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MasterDumpService">


-<EmployeeDump>

<BusinessUnit/>

<Department>E commerce</Department>

<DisplayName>Gayathri</DisplayName>

<Mail>gayathri@xyz.com</Mail>

</EmployeeDump>


-<EmployeeDump>

<BusinessUnit/>

<Department/>

<DisplayName>kiran</DisplayName>

<Mail>kiran@domain.com</Mail>

</EmployeeDump>


-<EmployeeDump>

<BusinessUnit/>

<Department/>

<DisplayName>xyz</DisplayName>

<Mail>xyz@domian.com</Mail>

</EmployeeDump>

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 09 июля 2019

Ключом к проблеме является соединение с базой данных.Мы могли бы проверить результат, возвращаемый сущностью EF, добавив точку останова при отладке.
Когда мы внедряем службу в IIS, строка подключения к базе данных должна лучше использовать имя пользователя / пароль, а не встроенную защиту.Поскольку удостоверение пула приложений IIS может отличаться от текущего пользователя, использующего VS.
Кроме того, при развертывании службы в IIS мы должны указать базовый адрес в модуле привязки сайта IIS вместо файла webconfig.enter image description here
Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

...