2016-04-26 15 views
1

Ich sehe, dass es einige Fragen zu diesem speziellen Problem gibt. Ich habe anderthalb Tage damit verbracht, all die verschiedenen Vorschläge auszuprobieren. Bisher hat keiner für mich gearbeitet und ich weiß nicht, was ich als nächstes tun soll. Daher appelliere ich an die große Wissensbasis, die hier gefunden wurde, mit der Hoffnung, dass jemand das Problem sehen und mir helfen wird. Zu einer Zeit, vor ein paar Jahren, hatte ich das alles für mich, mehrere PCs vor. Aber als ich auf einen neuen PC umsteigen musste, konnte ich es damals oder später nicht mehr hinkriegen, konnte es aber umgehen. Jetzt muss ich das für eine aktuelle Aufgabe auflösen.WCF-Test-Client kann Service nicht hinzufügen - Metadaten können nicht abgerufen werden

Ich habe einen SOAP WCF WebService in IIS (nicht IIS Express) auf meinem lokalen Rechner ausgeführt.

Ich habe einen App Pool erstellt. Grundeinstellungen sind .NET Framework v4.0.30319 mit integriertem Pipeline-Modus. Bei den erweiterten Einstellungen ist die Identität auf ApplicationPoolIdentity festgelegt.

habe ich eine Website (nicht die Standard-Website.)

Zwei Bindungen definiert: Bindings

Wir haben einen Client und einen Dienst selbst signierten Zertifikate, die wir für die Entwicklung und QA verwenden. Ich habe das Service-Zertifikat der https-Bindung zugewiesen. Der Webservice kommuniziert über net.tcp mit einem anderen Dienst.

In den Grundeinstellungen habe ich den physischen Pfad zu c: \ inetpub \ websitename definiert. Um die Verbindung erfolgreich herzustellen, musste ich unter Verwendung von Testeinstellungen ... als ein bestimmter Benutzer eine Verbindung herstellen, indem ich meine Netzwerk-Domain-Benutzer-ID und mein Passwort verwendete. Ich habe noch keinen Weg gefunden, das zu umgehen.

In den erweiterten Einstellungen .... Application Pool ist auf den App-Pool ich erstellt festgelegt. Der physische Pfad lautet c: \ inetpub \ wwwroot \ websitename. Aktivierte Protokolle auf http, net.tcp gesetzt.

Ich bin in der Lage, erfolgreich auf der Website zu suchen. Hier

ist die web.config für den Web-Service:

<system.serviceModel> 
<client> 
    <endpoint address="net.tcp://10.100.13.28:8102/Acord/201307" behaviorConfiguration="NetTcpCertificatesBehavior" binding="netTcpBinding" bindingConfiguration="NetTcpCertificatesBinding" contract="AcordContract.IAcordService201307" name="AcordEndpoint"> 
    <identity> 
     <certificateReference findValue="7da522dd75f3fca2687837b7b67e117a8700ec62" isChainIncluded="false" storeLocation="LocalMachine" x509FindType="FindByThumbprint" /> 
     <!--<dns value="localhost" />--> 
    </identity> 
    </endpoint> 
    <endpoint address="net.tcp://qaschedapp:8002/IMS/201210" behaviorConfiguration="NetTcpCertificatesBehavior" binding="netTcpBinding" bindingConfiguration="NetTcpCertificatesBinding" contract="IdentityManagementContract.IIdentityManagementService201210" name="IMSEndpoint"> 
    <identity> 
     <certificateReference findValue="7da522dd75f3fca2687837b7b67e117a8700ec62" isChainIncluded="false" storeLocation="LocalMachine" x509FindType="FindByThumbprint" /> 
    </identity> 
    </endpoint> 
</client> 
<services> 
    <service name="AcordWebService.AcordWebService" behaviorConfiguration="Visible"> 

    <endpoint address="" binding="basicHttpsBinding" contract="AcordWebService.IAcordWebService201307" bindingConfiguration="BasicHttpsBinding"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="https://10.100.13.28:51448/" /> 
     </baseAddresses> 
    </host> 
    <!--binding for clients outside the firewall calling from C# with WCF using certs --> 
    <endpoint address="net.tcp://10.100.13.28:8122/AcordWebService.svc" binding="netTcpBinding" bindingConfiguration="NetTcpCertificatesBinding" name="NetTcpCertificatesEndpoint" contract="AcordWSContract.IAcordWSService201309"> 
     <identity> 
     <dns value="localhost"/> 
     </identity> 
    </endpoint> 
    </service> 
</services> 
<behaviors> 
    <endpointBehaviors> 
    <behavior name="NetTcpCertificatesBehavior"> 
     <clientCredentials> 
     <clientCertificate findValue="631f5a67a9a70bc78540bb809e73fd1dbd00bbeb" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" /> 
     <serviceCertificate> 
      <authentication certificateValidationMode="None" /> 
     </serviceCertificate> 
     </clientCredentials> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="Visible"> 
     <!-- To avoid disclosing metadata information, set the values below to false before deployment --> 
     <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" httpGetUrl=""/> 
     <!-- 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"/> 
     <serviceCredentials> 
     <serviceCertificate findValue="7da522dd75f3fca2687837b7b67e117a8700ec62" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint"/> 
     <clientCertificate> 
      <certificate findValue="631f5a67a9a70bc78540bb809e73fd1dbd00bbeb" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint"/> 
     </clientCertificate> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<bindings> 
    <basicHttpsBinding> 
    <!--binding for clients within the firewall but calling the old style soap service--> 
    <binding name="BasicHttpsBinding" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <security mode="Transport"> 
     <transport clientCredentialType="None" /> 
     </security> 
    </binding> 
    </basicHttpsBinding> 
    <netTcpBinding> 
    <binding name="NetTcpCertificatesBinding" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <!--<readerQuotas maxDepth="32" maxStringContentLength="65535" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />--> 
     <!--<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />--> 
     <security> 
     <transport clientCredentialType="Certificate" protectionLevel="EncryptAndSign" /> 
     </security> 
    </binding> 
    </netTcpBinding> 
</bindings> 
<protocolMapping> 
    <add binding="wsHttpBinding" scheme="https" /> 
</protocolMapping>  
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 

Hier ist der vollständige Fehler Ich erhalte, wenn ein Dienst an der WCF-Testclient hinzuzufügen versuchen:

Fehler: Metadaten können nicht von https://10.100.13.28:51448/AcordWebService.svc abgerufen werden. Wenn es sich um einen Windows Communication Foundation-Dienst handelt, auf den Sie zugreifen können, überprüfen Sie, ob Sie die Metadatenveröffentlichung unter der angegebenen Adresse aktiviert haben. Informationen zur Veröffentlichung von Metadaten finden Sie in der MSDN-Dokumentation unter http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata. Exchange-Fehler-URI: https://10.100.13.28:51448/AcordWebService.svc Metadaten enthalten eine Referenz, die nicht aufgelöst werden kann: 'https://10.100.13.28:51448/AcordWebService.svc'. Vertrauensstellung für den sicheren SSL/TLS-Kanal mit der Berechtigung "10 .100.13.28: 51448" konnte nicht hergestellt werden. Die zugrunde liegende Verbindung wurde geschlossen: Die Vertrauensbeziehung für den sicheren SSL/TLS-Kanal konnte nicht hergestellt werden. Das Remotezertifikat ist gemäß dem Überprüfungsverfahren ungültig.HTTP GET Fehler-URI: https://10.100.13.28:51448/AcordWebService.svc Beim Herunterladen von 'https://10.100.13.28:51448/AcordWebService.svc' ist ein Fehler aufgetreten. Die zugrunde liegende Verbindung wurde geschlossen: Die Vertrauensbeziehung für den sicheren SSL/TLS-Kanal konnte nicht hergestellt werden. Das Remote-Zertifikat ist gemäß dem Validierungsverfahren ungültig. IIS

Windows Features

Jedwedes Hilfe geschätzt wird, wenn ich in der Lage bin, um endlich dieses Problem zu beheben:

schließlich in ein paar Löcher in den Informationen zu füllen.

Vielen Dank im Voraus.

Antwort

1

Hier ist, wie ich mein Problem gelöst:

Zuerst musste ich in meinem web.config auf die Protokollierung aktivieren:

<system.serviceModel> 
    <diagnostics> 
     <messageLogging maxMessagesToLog="30000" logEntireMessage="true" 
       logMessagesAtServiceLevel="true" 
       logMalformedMessages="true" 
       logMessagesAtTransportLevel="true" 
       maxSizeOfMessageToLog="65535000"> 
     </messageLogging> 
    </diagnostics> 
    </system.serviceModel> 
    <system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel" 
       switchValue="Verbose, ActivityTracing" 
       propagateActivity="true"> 
     <listeners> 
      <add name="traceListener" /> 
     </listeners> 
     </source> 
    </sources> 
    <sharedListeners> 
     <add name="traceListener" 
      type="System.Diagnostics.XmlWriterTraceListener" 
      initializeData="c:\logs\Traces.svclog" /> 
    </sharedListeners>  
    <trace autoflush="true" /> 
    </system.diagnostics> 

Dann überprüft die ich, dass Konstruktor meine Web-Service der schließlich erzeugten Log entdeckt Fehler beim Versuch, NLog zu initialisieren. Letztendlich entdeckte ich, dass NLog versuchte, in EventLog zu schreiben, für das es keine Berechtigungen hatte. Ich folgte den Anweisungen here mit der Ausnahme, dass ich dem IIS AppPool-Benutzer die Berechtigungen erteilt. Das hat mein Problem gelöst.