2010-10-02 23 views
5

otrzymuję „Endpoint not found” podczas próby dostępu do swojego serwisu za pośrednictwem przeglądarki naEndpoint Nie znaleziono Kiedy Hosting w ASP.NET

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

otrzymuję „Błąd: Nie można uzyskać metadane z http://localhost:10093/Services/Service1.svc” podczas próby uzyskać dostęp do tego samego adresu z programu wcftestclient.

Gdybym umieścić punkt przerwania w realizacji usług to jest trafiony, więc zakładam plik SVC jest ustawiony prawidłowo:

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

Oto mój 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

o to przykładowy projekt z emisją - http://www.nippyzip.com/uploads/101003074000-57717.zip – chief7

+0

mam ten sam problem. I bez punktu końcowego nie można wygenerować klienta dla mojej aplikacji Silverlight – Evgeny

Odpowiedz

5

więc masz * plik .svc do obsługi Twojej usługi. Czy można kliknąć prawym przyciskiem myszy w programie Visual Studio na tym pliku i powiedzieć "Pokaż w przeglądarce"? Czy dostaniesz tam coś, czy od razu rzuca błąd?

Następnie: punkt końcowy usługi nie ma atrybutu address="", co moim zdaniem jest obowiązkowe - spróbuj dodać (nawet jeśli nie podasz w nim adresu).

Jeśli hostujesz w IIS, Twój adres usługi jest zdefiniowany przez katalog wirtualny, w którym znajduje się Twój plik SVC, oraz sam plik SVC - możesz nie być w stanie zdefiniować konkretnego portu lub czegokolwiek (obsługa IIS zajmie się że).

Więc spróbuj połączyć się

http://localhost/Services/Service1.svc 

to działa przypadkiem ??

Aktualizacja: ponownie czytając wpis, określasz specjalną fabrykę usługi - WebServiceHostFactory. Czy to jest domyślny WebServiceHostFactory dostarczony przez .NET, czy jest to coś, co sam zbudowałeś?

Chodzi o to: .NET WebServiceHostFactory użyje webHttpBinding usług WCF REST - że nie będzie współpracować z punktu końcowego określającego basicHttpBinding, ani nie będzie usługa REST mają jakiekolwiek metadane ....

Aktualizacja # 2: spróbuj użyć tylko pełnej nazwy klasy usługi, ale bez specyfikacji zestawu, zarówno w pliku SVC, jak i pliku konfiguracyjnym.

Więc to zmienić:

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

do tego:

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

SVC plik:

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

Config file:

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

Tak, używam .svc do hostowania usługi. Otrzymuję to samo po kliknięciu prawym przyciskiem myszy i wyświetleniu w przeglądarce. – chief7

+1

Dodano pusty adres, bez zmian. Próbowany adres URL bez portu, otrzymany "Internet Explorer nie może wyświetlić strony internetowej" Jest to specjalna fabryka, ale próbowałem użyć standardowej fabryki hostów i otrzymałem ten sam błąd – chief7

+1

@ Chief7: o ile nie można wykonać "Wyświetl w Przeglądarka "z powodzeniem, Twoja usługa ma poważny problem i tak długo, jak to nie działa, nie będzie można uruchomić usługi. Zaktualizowano moją odpowiedź, dodając kilka innych zaleceń, aby wypróbować: –

0

Twój komunikat o błędzie "Nie można uzyskać metadanych" i nie zdefiniowano punktu końcowego MetadataExchange. Masz httpGetEnabled = "True", który jest również wymagany.

Spróbuj wyznaczającą końcowy MEX, szczegółowe informacje, jak wyświetlić: http://bloggingabout.net/blogs/dennis/archive/2006/11/09/WCF-Part-4-3A00-Make-your-service-visible-through-metadata.aspx

+1

dziękuję za odpowiedź, ale bez zmian po dodaniu mex punktu końcowego – chief7

0

moim web.config dla mojego usług WCF jest bardzo podobny do Ciebie. Zdecydowanie musisz dodać punkt końcowy MEX, jak powiedział Shiraz. Dodałem konfigurację zachowania, która pozwala każdej wielkości wiadomości przejść przez WCF. Spróbuj użyć tych ustawień, jeśli może pomóc (nie zapomnij, aby zmienić ustawienia zamówienia):

<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

Można również użyć WcfTestClient.exe w folderze Visual Studio, aby przetestować to z łatwością (Visual Studio 10.0 \ Common7 \ IDE \ WcfTestClient.exe i http://msdn.microsoft.com/en-us/library/bb552364.aspx). Będziesz potrzebował działającego punktu końcowego MEX. –

+1

Mam zdefiniowany punkt mex i próbowałem dodać usługę do programu wcftestclient. Mówię, że usługa została dodana pomyślnie, ale do listy nie są dodawane żadne usługi. – chief7

4

Na Solution Explorer, otwórz .svc za pomocą znaczników „widok”, upewnij się, masz coś takiego:

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

Gdzie Yourservice to nazw i yourservice jest nazwa .svc stworzył.

4

miałem takie same wyniki (Endpoint nie znaleziono), kiedy kładę to w oknie przeglądarki

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

Wtedy kiedy kładę całą url metody, zabrakło w porządku. Podoba Ci się to

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

w moim pliku .svc Używam tego

Factory="System.ServiceModel.Activation.WebServiceHostFactory" 

myślę, że fabryka nie obraca się aż do punktu końcowego jest to potrzebne. Właśnie dlatego otrzymujemy punkt końcowy nie znaleziony w przeglądarce (?).

Oto, jak wygląda sygnatura metody w kodzie interfejsu.

using System.ServiceModel.Web; 

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

Nic nie umieszczam w webconfig. Jest tam trochę rzeczy, ale myślę, że przyszedł w VS, Dodaj szablon usługi WCF. Wygląda to tak:

<system.serviceModel> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name=""> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 
Powiązane problemy