Frage

Hallo zusammen

Ich habe zur Zeit ein Problem einen WCF-Dienst von einem Windows-Dienst aufrufen. Meine Anwendung Lösung sieht wie folgt aus.

  • Web-Administrationskonsole (Web Project)
  • Central Control (Windows Service)
    • WCF-Dienst so kann die Web-Administrationskonsole, um es anschließen und konfigurieren
    • Mehrere Anrufe verwenden WCF auf dem Knoten (Fenster Service)
  • Knoten (Windows Service)
    • WCF-Dienst des Central Control Windows-Dienst konfiguriert, dass das
    • ermöglichen

Die Web-Verwaltungskonsole kann die Central Control WCF zuzugreifen, aber die zentrale Steuer Zeiten heraus, wann immer es an den Knoten zu verbinden versucht. Bei der Prüfung dies hat ich einen Launcher-App, die ein einfaches Windows Forms-Projekt ist, die eine Instanz jeden Dienstes erstellt und hat ein paar Tasten, die eine WCF-Funktion in jedem der Windows-Dienste nutzen (nur um zu sehen, was versagt) diese Launcher App konnte nicht zu einem der Windows Service sprechen. Dies war verwirrt mich so habe ich die gleichen Tasten auf einem Web-Formular im Web-Administrationskonsole und es ist sowohl mit Windows Services perfekt durch WCF. Ich weiß, dass das WCF Zeug funktioniert, wie ich es durch IE schlagen kann und all die wunderbaren XML (und natürlich die Tatsache, dass die Anrufe von dem Web-App funktionieren ein guter Hinweis dafür sind sein und läuft) finden Sie unter

Kurz gesagt: Meine Web-Anwendungen können die WCF-Dienste in meinem Windows-Dienste verwenden, aber Windows Forms und Windows-Dienste nicht. Warum ist das!?

Ich habe so ziemlich schon aus der Zeit an diesem Projekt laufe so schnelle Antworten wären genial!

Tech / Code Details Ich bin nicht mit Konfigurationsdateien in den Anwendungen. Alles wird durch Code erstellt, und ich habe den gleichen Code gewesen mit meinem WCF ruft allenthalben zu machen. Ich habe auch versucht, die Sicherheit überall in Fall zu deaktivieren, das das Problem war. Auch verwende ich die gleiche svcutil generierte Proxy-Dateien überall und halten es alle konsistent

Beispiel für einen Aufruf an den Node

Dim Bind As New WSHttpBinding(SecurityMode.None, True)
Bind.CloseTimeout = New TimeSpan(0, 0, 10)
Bind.OpenTimeout = New TimeSpan(0, 0, 10)
Bind.SendTimeout = New TimeSpan(0, 0, 10)
Dim client As New BN.BNodeServiceClient(Bind, New EndpointAddress("http://localhost:27374/Node"))
client.sendMessage("Test Message")
client.Close()

Der Knoten öffnet seine WCF

BNodeHost = New ServiceHost(GetType(iBNodeService))
BNodeHost.AddServiceEndpoint(GetType(BNodeService), New WSHttpBinding(SecurityMode.None, True), New Uri("http://localhost:27374/Node"))
Dim metadataBehavior As ServiceModel.Description.ServiceMetadataBehavior
metadataBehavior = BNodeHost.Description.Behaviors.Find(Of _
ServiceModel.Description.ServiceMetadataBehavior)()

If metadataBehavior Is Nothing Then
    metadataBehavior = New ServiceModel.Description.ServiceMetadataBehavior()
    metadataBehavior.HttpGetEnabled = True
    metadataBehavior.HttpGetUrl = New Uri("http://localhost:27374/Node")
    BNodeHost.Description.Behaviors.Add(metadataBehavior)
Else
    BNodeHost.Description.Behaviors.Add(metadataBehavior)
End If

BNodeHost.Open()

Das war alles funktioniert, bevor ich die verschiedenen Bits richtige Windows-Dienste gemacht und versucht, Installateure, um es hinzuzufügen. Die Installateure funktionieren und die Dienste installieren, die starten und erlauben Sie mir alle WCF XML in IE zu sehen.

Wie Sie sagen, vielleicht in der Lage, ich bin sehr neu zu WCF und dies ist meine erste Anwendung es zu benutzen. Die grundlegenden Bits haben ziemlich Kopieren / Einfügen / Alte Jobs aus einer Probe, die nicht Konfigurationsdateien nicht verwendet.

Jede Hilfe wäre sehr geschätzt.

War es hilfreich?

Lösung

überprüfen, ob alle Endpunkte in der appconfig in dem Admin-Webapp des webconfig die Einstellungen anzupassen. Jeder setzt verschiedene Timeout-Werte, das heißt:

<system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttpBinding_ILookupService" closeTimeout="00:01:00"
                 openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                 bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                 maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
                 textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                     maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
                     enabled="false" />
                    <security mode="Message">
                        <transport clientCredentialType="Windows" proxyCredentialType="None"
                         realm="" />
                        <message clientCredentialType="Windows" negotiateServiceCredential="true"
                         algorithmSuite="Default" establishSecurityContext="true" />
                    </security>
                </binding>
            </wsHttpBinding>
        </bindings>
        <behaviors>
            <endpointBehaviors>
                <behavior name="LargeEndpointBehavior">
                    <dataContractSerializer  ignoreExtensionDataObject="true" maxItemsInObjectGraph="2147483647"/>
                </behavior>
            </endpointBehaviors>
        </behaviors>

        <client>
            <endpoint address="http://localhost:59599/LookupService.svc"
             binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ILookupService"
             contract="FEEALookupServiceReference.ILookupService" name="WSHttpBinding_ILookupService">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>

Hoffnung, das hilft. viel Glück.

Andere Tipps

Ich kann diese eine nicht richtig funktioniert. Es schien ein Problem mit Windows-Dienst Windows-Dienst Kommunikation. Es gibt einen Weg, um es irgendwo passieren, aber ich lief die Zeit aus, so löste ich es von einem des Bits (die Central Control) in eine normale Windows-Anwendung drehen und es auf diese Weise installiert. Funktioniert prima und der Kunde ist zufrieden:)

Überprüfen Sie die Berechtigungen für den Benutzer, dass die Windows-Dienste ausgeführt werden unter - sie Netzwerkdienst auf die Standard möchten, die nicht über ausreichende Berechtigungen verfügen kann. Führt sie als dedizierten Benutzer mit den richtigen Berechtigungen.

Und überprüfen Sie die Windows-Firewall. Es liebt einige Ihrer Web-Verbindungen zu blockieren. Ich in der Regel nur schalten Sie ihn aus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top