2016-09-19 2 views
2

Ich denke, ich habe alles versucht, aber ich kann nicht eine einfache net.tcp WCF-Dienst zu arbeiten, und ich brauche ein bisschen Hilfe . Ich habe ein WCF net.tcp Projekt in Visual Studio 2015 mit der folgenden Serviceklasse:net.tcp löst Ausnahme mit (scheinbar) Solid .config <systerm.serviceModel>

namespace AppRefactory.JdmCommSample 
{ 
    public enum DocType { Labels, Releases, Artists } 

    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together. 
    [ServiceContract] 
    public interface ILabelOperations 
    { 

     [OperationContract] 
     bool PassLabelProcess(string targetAddress, string hostCommand, MusicLabelContract musicLabel); 

     // TODO: Add your service operations here 
    } 
} 

und die folgenden implementiert den Dienst in einer Datei LabelProcess.svc:

namespace AppRefactory.JdmCommSample 
{ 
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "MusicLabel" in code, svc and config file together. 
    // NOTE: In order to launch WCF Test Client for testing this service, please select MusicLabel.svc or MusicLabel.svc.cs at the Solution Explorer and start debugging. 
    public class LabelOperations : ILabelOperations 
    { 
     public bool PassLabelProcess(string targetAddress, string hostCommand, MusicLabelContract musicLabel) 
     { 
      throw new NotImplementedException(); 
     } 
    } 
} 

ich umfangreiche gemacht habe für den Dienst auf der web.config lesen und haved ServiceModelReg.exe mir zu helfen, verwendet - aber die folgende ist die aktuelle Ausgabe des Service-Projekt web.config:

<?xml version="1.0"?> 
<configuration> 

    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5.2"/> 
    <httpRuntime targetFramework="4.5.2"/> 
    <httpModules> 
     <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"/> 
    </httpModules> 
    </system.web> 
    <system.serviceModel> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="epTcpBehavior"> 
      <endpointDiscovery /> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior name="ServiceBehaviorConfig"> 
      <serviceMetadata httpGetEnabled="false" /> 
      <serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false" 
      includeExceptionDetailInFaults="true" /> 
     </behavior> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <protocolMapping> 
     <add binding="basicHttpsBinding" scheme="https"/> 
     <add binding="netTcpBinding" scheme="net.tcp" bindingConfiguration="InsecureTcp" /> 
    </protocolMapping>  
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/> 
    <services> 
     <service behaviorConfiguration="ServiceBehaviorConfig" name="AppRefactory.JdmCommSample.LabelOperations"> 
     <endpoint address="LabelService" binding="netTcpBinding" bindingConfiguration="InsecureTcp" 
      name="LabelOperations" contract="AppRefactory.JdmCommSample.ILabelOperations" /> 
     <endpoint address="netTcpMex" binding="mexTcpBinding" bindingConfiguration="NewBinding0" 
      name="NetTcpMEX" contract="IMetadataExchange" /> 
     <endpoint address="mexhttp" binding="mexHttpBinding" name="HttpMex" 
      contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="net.tcp://localhost/JdmCommSample/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <bindings> 
     <netTcpBinding> 
     <binding name="InsecureTcp" portSharingEnabled="true"> 
      <security mode="None" /> 
     </binding> 
     </netTcpBinding> 
     <mexTcpBinding> 
     <binding name="NewBinding0" /> 
     </mexTcpBinding> 
    </bindings> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="ApplicationInsightsWebTracking"/> 
     <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" 
     preCondition="managedHandler"/> 
    </modules> 
    <!-- 
     To browse web app root directory during debugging, set the value below to true. 
     Set to false before deployment to avoid disclosing web app folder information. 
     --> 
    <directoryBrowse enabled="true"/> 
    <validation validateIntegratedModeConfiguration="false"/> 
    </system.webServer> 

</configuration> 

Als ich in die c gehen lient Projekt und versucht, den Dienstverweis (in Visual Studio 2015) hinzuzufügen, erhalte ich folgende Fehlermeldung:

enter image description here

Die ‚Discover‘, um den Dienst nicht verraten, wenn darauf geklickt, so manuell eingeben I die Service-Adresse: net: //localhost/JdmCommSample/LabelOperations.svc und erhalten folgendes Ergebnis die ‚Go‘ klicken:

enter image description here

Schließlich habe ich Sie auf den ‚Details‘ Link in der Fehlermeldung Block (im Dialog) oben und erhalten Sie folgendes:

Dienstverweis hinzufügen Fehlerdialog:

The URI prefix is not recognized. Metadata contains a reference that cannot be resolved: 'net.tcp://localhost/JdmCommSample/LabelOperations.svc'. There was no endpoint listening at net.tcp://localhost/JdmCommSample/LabelOperations.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. If the service is defined in the current solution, try building the solution and adding the service reference again.

Ich habe jetzt schon eine ganze Weile die gleiche Fehlermeldung angezeigt und kann nicht herausfinden, warum die Metadaten für die Kunden darauf, halten die alte http zur Verwendung: // Adresse für den Dienst und warum er die net.tcp-Adresse nicht akzeptiert.

Abschließend möchte ich nur schnell hinzufügen ich folgendes als meine dev Umgebung bin mit:

  • Visual Studio 2015
  • Windows-10
  • IIS 10

... und ich habe mir die Zeit genommen, dieses Problem zu lösen, indem ich die IIS-Einstellungen mit dem Standarddienst, der net.tcp unterstützt (sowohl mit als auch ohne http), ändere und eine virtuelle Anwendung in den Ordnern/bin und coding erstelle, um s interaktives Debugging. Die oben im letzten Dialog beschriebene Fehlermeldung ändert sich - aber nur um zu sagen, dass die von mir verwendete net.tcp: // -Adresse nicht verfügbar ist.

Wieder wird Ihre Hilfe sehr geschätzt !!!

+0

Bitte fügen Sie die verknüpften Bilder inline und nicht als Hyperlink ein. Einer von ihnen ist nicht zugänglich. Danke –

+0

StackOverflow beschränkt Bilder, so dass ich nur extern verlinken kann, an dieser Stelle - leider. Ich werde versuchen, den gebrochenen Bildlink an meinem Ende zu reparieren. und wenn Sie nur auf die zwei Links oben in der Antwort klicken könnten - es dauert nur ein paar Sekunden, wenn Sie in Ihrem Browser neu geöffneten Bild-Registerkarte suchen. Danke! – apprefactory

+0

Eine kurze Notiz über "Add Service Reference Dalogue - B" in der Bilderliste; Es heißt "net: //" am Anfang der Adressleiste ..... aber ich bekam diese Fehlermeldung unabhängig davon, ob net.tcp: // korrekt hinzugefügt wurde. – apprefactory

Antwort

1

Okay - so sieht es aus, als hätte ich dieses Durcheinander gelöst ..... und das Problem hier ist - Ich habe Visual Studio für die Konfiguration eines net.tcp Endpunktes in vielen Jahren nicht benutzt und fälschlicherweise mit dem In Abwesenheit des WCF-Testdienstes, der früher in der Taskleiste stand, würde man den Dialog Service-Referenz hinzufügen verwenden, um net.tcp-Verknüpfungen zu konfigurieren.

Laut dem Artikel der MSDN Library zum Einrichten eines Netzes.TCP-Service über Windows-Prozessaktivierung (WAS), alle Endpunkt-Konfiguration und Service-Referenzen werden entweder mit handgefertigten oder Tool-generierten Code (mit svcutil.exe) auf dem Client - und weitgehend handwerkliche Logik auf der Service-Seite behandelt.

Also meine Fragen in diesem Thread waren das Ergebnis von schlechten Erwartungen und Fehlinformationen. Entschuldigung ...

Der nächste Schritt besteht darin, eine Einwegdienstmethode zu erstellen, die bewirkt, dass ein Ereignis auf dem Client ausgelöst wird. Ich erwarte, dass es in den kommenden Tagen Fragen zu diesem Thema geben wird - wenn jemand nützliche Links zu diesem Thema hat, bitte behalte sie nicht für dich! ;)

Verwandte Themen