0

Ich habe zwei Tage lang meinen Kopf dagegengeschlagen und habe versucht, eine Reihe von Dingen zu versuchen, um dies zum Erfolg zu bringen. Ich versuche, dieses System auf meinem lokalen Computer für Debugging-Zwecke arbeiten zu lassen. Ich hoffe, dass jemand hier etwas sehen kann, für das ich blind geworden bin, oder mir Ratschläge geben kann.WCF - EndPoint nicht gefunden Ausnahme

Ich habe zwei WCF-Dienste (eigentlich 4, aber dazu später mehr). Einer ist ein SOAP-Webservice, der auf IIS ausgeführt wird. Der Webservice versucht, den anderen Dienst (den Agenten) anzurufen. In der Produktionsumgebung gibt es zwei Firewalls zwischen den beiden Diensten. Sie verwenden das net.tcp-Protokoll mit Zertifikatsicherheit, um eine Verbindung herzustellen.

Wir verwenden selbstsignierte Zertifikate für Entwicklungs- und Qa-Zwecke.

Ich habe die Client- und Dienstzertifikate installiert und dem App-Pool Lesezugriff auf die Zertifikate gewährt.

Ich habe überprüft, dass Net.Tcp Portfreigabedienst, Net.Tcp Listener Adapter, Net.Pipe Listener Adapter alle ausgeführt werden.

Das Protokoll "net.tcp" ist aktiviert und die Bindung "net.tcp" ist in IIS definiert.

Die Firewall ist ausgeschaltet.

Beide Dienste stellen eine Verbindung zu einem Identitätsverwaltungsdienst (IMS) her, der auch ein WCF-Dienst ist, der auf einem Qa-Server und nicht auf meinem lokalen Computer ausgeführt wird. Der Webservice kann sich erfolgreich mit dem IMS-Dienst verbinden. Ich versuche, dieselbe Bindung für die Verbindung mit dem Agentendienst zu verwenden. Soweit ich die Adresse sagen kann, sind Binding und Vertrag alle übereinstimmend zwischen dem Webservice und dem Agenten, aber ich bekomme immer noch die EndPointNotFoundException. Was habe ich verpasst? Hier

ist der system.serviceModel Abschnitt aus der web.config für den Webservice:

<system.serviceModel> 
<client> 
    <endpoint address="net.tcp://localhost:8102/Acord/201307" behaviorConfiguration="NetTcpCertificatesBehavior" binding="netTcpBinding" bindingConfiguration="NetTcpCertificatesBinding" contract="AcordContract.IAcordService201307" name="AcordCertificateEndpoint"> 
    <identity> 
     <certificateReference findValue="(value redacted)" isChainIncluded="false" storeLocation="LocalMachine" x509FindType="FindByThumbprint" /> 
     <dns value="localhost" /> 
    </identity> 
    </endpoint> 
</client> 
<behaviors> 
    <endpointBehaviors> 
    <behavior name="NetTcpCertificatesBehavior"> 
     <clientCredentials> 
     <clientCertificate findValue="(value redacted)" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" /> 
     <serviceCertificate> 
      <authentication certificateValidationMode="None" /> 
     </serviceCertificate> 
     </clientCredentials> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 
<bindings> 
    <netTcpBinding> 
    <binding name="NetTcpCertificatesBinding" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <security> 
     <transport clientCredentialType="Certificate" protectionLevel="EncryptAndSign" /> 
     </security> 
    </binding> 
    <binding name="NetTcpMessageCertificatesBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
      transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="100" 
      maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="100" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
     <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> 
     <security mode="Message"> 
     <message clientCredentialType="Certificate" /> 
     </security> 
    </binding> 
    <binding name="NetTcpWindowsBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:01:00" sendTimeout="00:10:00" 
      transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" 
      listenBacklog="10" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="10" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="32" maxStringContentLength="65535" 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> 
    <binding name="NetTcpMessageWindowsBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="100" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="100" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
     <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> 
     <security mode="Message"> 
     <message clientCredentialType="Windows" /> 
     </security> 
    </binding> 
    </netTcpBinding> 
</bindings> 

Hier ist der system.serviceModel Abschnitt von der app.config für den Agenten-Dienst:

<system.serviceModel> 
<diagnostics performanceCounters="Default"/> 
<bindings> 
    <netTcpBinding> 
    <binding name="NetTcpWindowsBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:01:00" sendTimeout="00:10:00" 
      transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" 
      listenBacklog="10" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="10" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="32" maxStringContentLength="65535" 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> 
    <binding name="NetTcpCertificatesBinding" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" sendTimeout="00:10:00" portSharingEnabled="true"> 
     <security> 
     <transport clientCredentialType="Certificate" protectionLevel="EncryptAndSign"/> 
     </security> 
    </binding> 
    <binding name="NetTcpMessageWindowsBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="100" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="100" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
     <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> 
     <security mode="Message"> 
     <message clientCredentialType="Windows" /> 
     </security> 
    </binding>  
    </netTcpBinding> 
</bindings> 
<services> 
    <service name="AcordAgent.AcordService" behaviorConfiguration="AcordServiceBehavior"> 

    <endpoint address="http://qaschedapp:8100/Acord" binding="webHttpBinding" behaviorConfiguration="HttpWebGetBehavior" contract="AcordContract.IMeta" name="MetaEndpoint"> 
     <!--the name of this endpoint above (MetaEndpoint) must stay--> 
    </endpoint> 
    <!--binding for clients within the firewall calling from C# with WCF --> 
    <endpoint address="net.tcp://localhost:8101/Acord/201307" binding="netTcpBinding" bindingConfiguration="NetTcpMessageWindowsBinding" name="NetTcpWindowsEndpoint" contract="AcordContract.IAcordService201307"> 
     <identity> 
     <dns value="localhost"/> 
     </identity> 
    </endpoint> 
    <!--binding for clients outside the firewall calling from C# with WCF using certs --> 
    <endpoint address="net.tcp://localhost:8102/Acord/201307" binding="netTcpBinding" bindingConfiguration="NetTcpCertificatesBinding" name="NetTcpCertificatesEndpoint" contract="AcordContract.IAcordService201307"> 
     <identity> 
     <dns value="localhost"/> 
     </identity> 
    </endpoint> 
    <endpoint address="net.tcp://localhost:8102/Acord/mex" binding="mexTcpBinding" contract="IMetadataExchange"/> 
    </service> 
</services> 
<behaviors> 
    <endpointBehaviors> 
    <behavior name="NetTcpCertificatesBehavior"> 
     <clientCredentials> 
     <clientCertificate findValue="(value redacted)" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint"/> 
     <serviceCertificate> 
      <authentication certificateValidationMode="None"/> 
     </serviceCertificate> 
     </clientCredentials> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="AcordServiceBehavior"> 
     <serviceDebug includeExceptionDetailInFaults="true"/> 
     <serviceCredentials> 
     <serviceCertificate findValue="(value redacted)" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint"/> 
     <clientCertificate> 
      <certificate findValue="(value redacted)" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint"/> 
     </clientCertificate> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

Nachtrag: ich habe gerade netstat -a laufen und Ich sehe nichts, was Port 8102 zuhört. Deshalb bekomme ich eindeutig die Antwort, die ich bekomme. Die Frage, die ich jetzt habe, ist: Warum hört der Agent nicht auf 8102 zu? Ich habe den Agenten-Service in Visual Studio 2015 mit festgelegten Breakpoints ausgeführt. Muss ich den Dienst installieren und dann an den Prozess anhängen?

Antwort

0

Nun, das Problem war, dass es in der Konfigurationsdatei dieser Anwendung eine App gibt, die steuert, ob der Servicehost erstellt wird oder nicht, und die Einstellung auf false gesetzt wurde. Ich kann nicht sagen, warum es eine solche Einstellung in der Konfigurationsdatei gibt. Die Einstellung von appSetting auf true hat jedoch ein ganz neues Problem ergeben. Also, zum nächsten Problem.