2013-07-26 13 views
6

Das nervt mich wirklich für ein paar Stunden. Ich habe den einfachsten WCF-Dienst mithilfe einer TCP-Bindung erstellt.Net TCP-Bindung: Das URI-Präfix wird nicht erkannt

namespace WcfTcpService 
{ 
    public class TestTcpService : ITestTcpService 
    { 
     public string Hello(string name) 
     { 
      return "Hello, " + name + "!"; 
     } 
    } 
} 

namespace WcfTcpService 
{ 
    [ServiceContract] 
    public interface ITestTcpService 
    { 
     [OperationContract] 
     string Hello(string name); 
    } 
} 

Web.config-Datei hat den folgenden Abschnitt:

<system.serviceModel> 
    <services> 
     <service name="WcfTcpService.TestTcpService" behaviorConfiguration="TestServiceBehavior"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="net.tcp://localhost:808/WcfTcpService.TestTcpService" /> 
      </baseAddresses> 
     </host> 
     <endpoint address="" binding="netTcpBinding" bindingConfiguration="tcpBinding" contract="WcfTcpService.ITestTcpService"></endpoint> 
     <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange"></endpoint> 
     </service> 
    </services> 
    <bindings> 
     <netTcpBinding> 
     <binding name="tcpBinding" portSharingEnabled="true"> 
      <security mode="None"></security> 
     </binding> 
     </netTcpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="TestServiceBehavior"> 
      <!-- To avoid disclosing metadata information, set the values below to false before deployment --> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 
      <!-- 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="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <!--<protocolMapping> 
     <add binding="basicHttpsBinding" scheme="https" /> 
     <add binding="netTcpBinding" scheme="net.tcp" /> 
    </protocolMapping>-->  
    <!--<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />--> 
    </system.serviceModel> 

Dieser Dienst wird in IIS gehostet:

detailed settings

Nun, wenn man versucht, einen Verweis auf net.tcp://localhost:808/WcfTcpService.TestTcpService von hinzufügen eine Client-Anwendung, ich bekomme weiterhin den Fehler:

The URI prefix is not recognized. 
Metadata contains a reference that cannot be resolved: 'net.tcp://localhost/WcfTcpService.TestTcpService'. 
The message could not be dispatched because the service at the endpoint address 'net.tcp://localhost/WcfTcpService.TestTcpService' is unavailable for the protocol of the address. 
If the service is defined in the current solution, try building the solution and adding the service reference again. 

Der net.tcp-Dienst wird ausgeführt, ich erhalte den gleichen Fehler mit WcfTestClient.exe. und ich kann http://localhost/WcfTcpService/TestTcpService.svc erfolgreich ausführen.

Ich habe google gesucht, aber nichts kam.

Danke!

EDIT:

Die Bindungen Bildschirm der 'Standardwebsite' sieht wie folgt aus btw:

bindings

+1

Sie diesen Fehler erhalten Sie, wenn Sie auf "Hinzufügen Dienstverweis" wählen? Versuchen Sie Adresse http: //localhost/WcfTcpService/TestTcpService.svc in diesem Dialogfeld. – empi

+0

die Bindungen in iis prüfen/iis express diese Frage Siehe: http://stackoverflow.com/questions/3188618/enabling-net-tcp – nakchak

+0

@empi Sie haben mich zu verarschen ... dass funktioniert. Wenn Sie dies als Lösung veröffentlichen, werde ich es akzeptieren. Vielen Dank! – Nullius

Antwort

8

Wenn Sie Service erstellen, das netTcpBinding verwendet, und Sie mögen Dienstverweis hinzufügen In Visual Studio sollten Sie die http-Adresse (httpGetEnabled) und nicht die tatsächliche TCP-Adresse verwenden, die der Dienst überwacht. Die Lösung bestand also darin, localhost/WcfTcpService/TestTcpService.svc als URL im Dialogfeld Service-Referenz hinzufügen zu setzen.

+1

Nur um abzuschließen: es ist tatsächlich 'net.tcp: // localhost/WcfTcpService/TestTcpService.svc', die den Trick gemacht haben. – Nullius

0

hatte ich gleiche Problem und ich änderte web.config wie folgt:

<serviceHostingEnvironment multipleSiteBindingsEnabled="true"> 
 
     <baseAddressPrefixFilters> 
 
     <add prefix="net.tcp://YourBaseUrl"/> 
 
     </baseAddressPrefixFilters> 
 
    </serviceHostingEnvironment>