Сервис WCF работает в VS, но не в build - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть собственный сервис wcf, который предназначен для компьютеров и телефонов Android.я успешно сделал службу пригодной для обеих целей, но когда я создал exe-файл (который отвечает за самостоятельное размещение службы), служба отлично работала на ПК, но не работала в мобильном приложении.вот файл app.config моей службы:

<?xml version="1.0" encoding="utf-8" ?>
<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>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" />
  </system.web>
  <!-- When deploying the service library project, the content of the config file must be added to the host's 
  app.config file. System.Configuration does not support config files for libraries. -->
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="httpBinding" maxBufferSize="128000000" maxReceivedMessageSize="128000000" />
      </basicHttpBinding>
      <webHttpBinding>
        <binding name="webBinding" closeTimeout="00:02:00" sendTimeout="00:02:00"
          maxBufferSize="6553600" maxReceivedMessageSize="6553600" crossDomainScriptAccessEnabled="true" />
      </webHttpBinding>
    </bindings>
    <diagnostics performanceCounters="Default" />
    <services>
      <service name="DeltaService.Data">
        <endpoint address="data" binding="basicHttpBinding" bindingConfiguration="httpBinding"
          name="data" contract="DeltaService.IData">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="json" behaviorConfiguration="Rest" binding="webHttpBinding"
          bindingConfiguration="webBinding" name="restdata" contract="DeltaService.IData">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8000/delta_api/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="Rest">
          <webHttp helpEnabled="true" defaultOutgoingResponseFormat="Json" />
        </behavior>
        <behavior name="Web">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="">
          <useRequestHeadersForMetadataAddress />
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment
      aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true"/>


  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="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>

, а вот код, запускающий службу:

serviceHost = new ServiceHost(typeof(Data));
NetHttpBinding netHttpBinding = new NetHttpBinding();
netHttpBinding.MaxReceivedMessageSize = 128 * 1000000; //128Mb
serviceHost.AddServiceEndpoint(typeof(IData), netHttpBinding, url);
erviceHost.Open();

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Вы настроили свой адрес на localhost.Этот адрес может быть доступен только с вашего компьютера, а не снаружи.

Когда вы размещаете свою службу, выберите адрес, к которому можно получить доступ извне.Поскольку я не знаю, где находится ваше устройство, я не знаю, сколько «снаружи» вам нужно.Локальная сеть?WAN?Обязательно прочитайте учебник по этому вопросу и выберите нужный адрес или DNS-запись.

0 голосов
/ 23 сентября 2019

Кажется, что вы размещаете сервис, используя другие программы хостинга.Одна вещь, которую мы должны принять во внимание, это то, что нам не нужно настраивать конечную точку сервиса и привязывать информацию при размещении сервиса в хостинговой программе (такой как приложение WinForms).Существует различие при хостинге этими двумя способами.Когда мы размещаем сервис, запустив его в Visual Studio, система автоматически ищет конфигурацию сервиса, поэтому конфигурация в файле Appconfig вступит в силу, при правильном связывании будут созданы разные виды сервиса (restful и soap web service).Но служба, использующая NetHttpBinding, будет отличаться от вышеупомянутой службы при размещении службы в других программах.
Одним словом, я предлагаю вам использовать приведенный ниже код в программе самостоятельного размещения.

ServiceHost sh = new ServiceHost(typeof(Data));
            sh.Open();

Он автоматически выполнит поиск конфигурации службы в файле Appconfig, чтобы служба была опубликована надлежащим образом.
Не стесняйтесь сообщить мне, если проблема все еще существует.

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