c # - Kunne ikke oprette forbindelse til WCF-service fra Windows-tjenesten

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en WCF-tjeneste på en fjernmaskine. På min lokale maskine har jeg en WPF-applikation og en windows-tjeneste, som jeg vil være i stand til at oprette forbindelse til WCF-tjenesten. WPF-applikationen forbinder og kommunikerer fint, men af ​​en eller anden grund vil Windows-tjenesten ikke forbinde. App.config-filerne for dem begge er identiske, og koden til at gøre forbindelsen er den samme i begge. Er der nogen grund til, hvorfor en windows service ville ikke være i stand til at oprette forbindelse?


Her er den undtagelse, jeg får:



  Stikket forbindelsen blev afbrudt. Dette kan skyldes en fejl, der behandler din besked, eller en modtagelse af timeout overskrides af
  fjernværten eller et underliggende netværksressourceproblem. Lokal stikkontakt
  timeout var '00: 01: 14.9900000'.



Den mærkelige ting om dette er undtagelsen kastes inden for 5 sekunder, ikke efter 1:15 at timeout er indstillet til.


Her er app.config:


<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="ServiceIP" value="127.0.0.1"/>
  </appSettings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="lib" />
    </assemblyBinding>
  </runtime>
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="NetTcpBindingEndpoint" closeTimeout="00:01:00"
          openTimeout="00:00:10" receiveTimeout="00:10:00" sendTimeout="00:01:15"
          transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
          hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288"
          maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="Transport">
            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
            <message clientCredentialType="Windows" />
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    <client>
      <endpoint address="net.tcp://localhost:8731/WCFService/" binding="netTcpBinding"
        bindingConfiguration="NetTcpBindingEndpoint" contract="WCFService.IWCFService"
        name="NetTcpBindingEndpoint">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
        <listeners>
          <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="Traces.svclog"/>
        </listeners>
      </source>
    </sources>
  </system.diagnostics>
</configuration>


Sporingen synes ikke at afsløre noget nyttigt, så vidt jeg kan fortælle.

Bedste reference


Tjek den konto, din Windows Service kører under. Da du har adgang til en netværksressource, skal du have en domænekonto, der har tilstrækkelige rettigheder til at få adgang til det (som din logget brugerkonto gør).