2010-10-02 6 views
5

erhalte ich „Endpoint nicht gefunden“ beim Versuch, meinen Dienst über den Browser für den Zugriff aufEndpoint nicht beim Hosten in ASP.NET gefunden

http://localhost:10093/Services/Service1.svc 

Ich erhalte „Fehler: Kann nicht Metadaten erhalten von http://localhost:10093/Services/Service1.svc“, wenn sie versuchen, Greifen Sie vom wcftestclient aus auf dieselbe Adresse zu.

Wenn ich einen Haltepunkt in der Service-Implementierung stellen Sie es getroffen wird, so nehme ich an die SVC-Datei ist korrekt eingerichtet:

<%@ ServiceHost Language="C#" Debug="true" 
Service="MyApp.Core.Service.Service.MyAppService,MyApp.Core.Service" 
Factory="CommonServiceFactory.WebServiceHostFactory,CommonServiceFactory" %> 

Hier ist meine config:

<system.serviceModel> 
    <services> 
     <service name="MyApp.Core.Service.Service.MyAppService,MyApp.Core.Service" 
       behaviorConfiguration="MainServiceBehavior"> 
     <endpoint name="newEndpoing" 
      binding="basicHttpBinding" bindingConfiguration="" 
      contract="MyApp.Core.Service.IMyAppService" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="MainServiceBehavior"> 
      <serviceMetadata httpGetEnabled="True"/> 
      <serviceDebug includeExceptionDetailInFaults="False" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
+0

hier ein Beispielprojekt mit dem Thema ist - http://www.nippyzip.com/uploads/101003074000-57717.zip – chief7

+0

ich das gleiche Problem haben. Und ohne Endpunkt kann ich keinen Client für meine Silverlight-Anwendung generieren. – Evgeny

Antwort

5

So haben Sie eine * .svc-Datei zum Hosten Ihres Dienstes. Können Sie mit der rechten Maustaste in Visual Studio auf diese Datei klicken und "Show in Browser" sagen? Hast du irgendwas da, oder wirft es sofort einen Fehler?

Als nächstes: Ihr Service-Endpunkt hat kein address="" Attribut, was ich glaube, ist obligatorisch - versuchen Sie das hinzufügen (auch wenn Sie keine Adresse darin angeben).

Wenn Sie in IIS hosten, wird Ihre Dienstadresse durch das virtuelle Verzeichnis, in dem Ihre SVC-Datei vorhanden ist, und die SVC-Datei selbst definiert. Sie können möglicherweise keinen bestimmten Port oder irgendetwas definieren (IIS wird behandelt) Das).

So versuchen zu

http://localhost/Services/Service1.svc 

funktioniert das nicht zufällig verbinden ??

Update: Lesen Sie Ihren Beitrag noch genauer, Sie geben eine spezielle Fabrik für den Service - WebServiceHostFactory. Ist dies der Standard WebServiceHostFactory von .NET zur Verfügung gestellt, oder ist das etwas, das Sie selbst gebaut haben?

Der Punkt ist: das .NET WebServiceHostFactory wird die webHttpBinding für RESTful WCF-Dienste nutzen - das ist nicht mit einem Endpunkt arbeiten basicHttpBinding Angabe, noch wird der REST-Service haben alle Metadaten ....

-Update # 2: versuchen Sie, nur den vollständig qualifizierten Klassennamen des Dienstes, aber ohne die Assembly-Spezifikation, sowohl in Ihrer SVC-Datei als auch in der Konfigurationsdatei zu verwenden.

So dies ändern:

Service="MyApp.Core.Service.Service.MyAppService,MyApp.Core.Service" 

dazu:

Service="MyApp.Core.Service.Service.MyAppService" 

SVC-Datei:

<%@ ServiceHost Language="C#" Debug="true" 
Service="MyApp.Core.Service.Service.MyAppService" %> 

Config-Datei:

<services> 
    <service name="MyApp.Core.Service.Service.MyAppService" 
      behaviorConfiguration="MainServiceBehavior"> 
    <endpoint name="newEndpoing" 
      binding="basicHttpBinding" bindingConfiguration="" 
      contract="MyApp.Core.Service.IMyAppService" /> 
    </service> 
</services> 
+0

Ja, ich verwende eine .svc, um den Dienst zu hosten. Ich bekomme das gleiche, wenn ich rechts klicke und im Browser anschaue. – chief7

+1

Leere Adresse hinzugefügt, keine Änderung. Versuchte URL ohne Hafen, empfing "Internet Explorer kann die Webseite nicht anzeigen" Es ist eine spezielle Fabrik, aber ich versuchte, die Standardhostfabrik zu verwenden und erhielt den gleichen Fehler – chief7

+1

@ Chief7: solange Sie nicht können "Ansicht in Browser "erfolgreich, Ihr Dienst hat ein großes Problem und solange dies nicht funktioniert, können Sie den Dienst nicht starten. Meine Antwort wurde mit ein paar weiteren Empfehlungen zum Ausprobieren aktualisiert. –

0

Ihre Fehlermeldung lautet: "Metadaten können nicht abgerufen werden", und Sie haben keinen MetadataExchange-Endpunkt definiert. Sie haben httpGetEnabled = "True", was auch erforderlich ist.

Versuchen Sie, einen MEX-Endpunkt definiert, für Details, wie man sehen: http://bloggingabout.net/blogs/dennis/archive/2006/11/09/WCF-Part-4-3A00-Make-your-service-visible-through-metadata.aspx

+1

danke für die Antwort, aber keine Änderung nach dem Hinzufügen eines mex-Endpunkts – chief7

0

meine web.config für meinen WCF-Dienst ist sehr ähnlich wie bei Ihnen. Sie müssen definitiv den MEX-Endpunkt hinzufügen, wie Shiraz sagte. Ich habe eine Verhaltenskonfiguration hinzugefügt, die jede Nachrichtengröße durch den WCF gehen lässt. Versuchen Sie, diese Einstellungen zu verwenden, wenn es Ihnen helfen kann (nicht vergessen die Vertrags Einstellungen ändern):

<system.serviceModel>  
<diagnostics> 
    <messageLogging logMalformedMessages="true" logMessagesAtTransportLevel="true" /> 
</diagnostics> 
<bindings> 
    <basicHttpBinding> 
    <binding name="BasicHttpBinding_IService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="524288000" maxBufferPoolSize="524288000" maxReceivedMessageSize="524288000" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> 
     <readerQuotas maxDepth="500000000" maxStringContentLength="500000000" maxArrayLength="500000000" maxBytesPerRead="500000000" maxNameTableCharCount="500000000" /> 
     <security mode="None"> 
     <transport clientCredentialType="None" proxyCredentialType="None" realm=""> 
      <extendedProtectionPolicy policyEnforcement="Never"/> 
     </transport> 
     <message clientCredentialType="UserName" algorithmSuite="Default"/> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="serviceBehavior"> 
     <dataContractSerializer maxItemsInObjectGraph="6553600" /> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<services> 
    <service behaviorConfiguration="serviceBehavior" name="RC.Svc.Web.TPF.Service"> 
    <endpoint 
     address="" 
     binding="basicHttpBinding" 
     bindingConfiguration="BasicHttpBinding_IService" 
     contract="RC.Svc.Web.TPF.IService" /> 
    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" /> 
    </service> 
</services> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
<client /> 

+0

Sie können auch die WcfTestClient.exe in Ihrem Visual Studio-Ordner verwenden, um dies leicht zu testen (Visual Studio 10.0 \ Common7 \ IDE \ WcfTestClient.exe und http://msdn.microsoft.com/en-us/library/bb552364.aspx). Sie benötigen einen funktionierenden MEX-Endpunkt. –

+1

Ich habe einen Mex-Punkt definiert und versucht, den Dienst zum WCFTestclient hinzuzufügen. Ich sage, dass der Dienst erfolgreich hinzugefügt wurde, aber keine Dienste zur Liste hinzugefügt werden. – chief7

4

Auf dem Projektmappen-Explorer öffnen Sie .svc, indem Sie „Ansicht Markup“, stellen Sie sicher, Sie haben so etwas wie:

... ServiceHost Language="C#" Debug="true" 
    Service="Yourservice.yourservice" CodeBehind="yourservice.svc.cs" %> 

Wo Yourservice Ihre Namespace ist und yourservice ist Name Ihres .svc erstellt.

4

hatte ich die gleichen Ergebnisse (Endpunkt nicht gefunden), wenn ich das im Browser-Fenster setzen

http://c143253-w7a:2221/ws/myService.svc 

Dann, wenn ich auf die Methode, um die ganze URL setzen, es lief gut. Gefällt Ihnen dieses

http://c143253-w7a:2221/ws/myService.svc/HelloWorld?theInput=pds 

In meiner SVC-Datei verwende ich diese

Factory="System.ServiceModel.Activation.WebServiceHostFactory" 

Ich denke, dass die Fabrik spin up nicht den Endpunkt, bis es gebraucht wird. Deshalb haben wir Endpoint nicht im Browser gefunden (?).

So sieht die Methodensignatur im Schnittstellencode aus.

using System.ServiceModel.Web; 

[WebGet(UriTemplate = "HelloWorld?theInput={theInput}")] 
[OperationContract] 
string HelloWorld(string theInput); 

Ich habe nichts in der webconfig. Da sind einige Sachen drin, aber ich denke, das kam in der VS, Add WCF Service Vorlage. Es sieht wie folgt aus:

<system.serviceModel> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name=""> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 
Verwandte Themen