2010-10-02 79 views
5

主機我得到嘗試通過瀏覽器在端點沒有發現當ASP.NET

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

訪問我的服務時,我得到「未找到終點」,「錯誤:無法從http://localhost:10093/Services/Service1.svc獲取元數據」嘗試當從wcftestclient訪問相同的地址。

如果我把在服務實現它打一個斷點,所以我想SVC文件是否設置正確:

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

這裏是我的配置:

<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

這裏是這個問題的樣本項目 - http://www.nippyzip.com/uploads/101003074000-57717.zip – chief7 2010-10-04 02:23:14

+0

我有同樣的問題。沒有終點無法爲我的Silverlight應用程序生成客戶端 – Evgeny 2011-07-04 15:10:32

回答

5

所以,你有一個* .svc文件來承載您的服務。你可以在Visual Studio中右鍵單擊該文件並說「在瀏覽器中顯示」?你有沒有得到任何東西,還是立刻拋出錯誤?

下一步:您的服務端點沒有address=""屬性,我認爲這是強制性的 - 嘗試添加(即使您未指定地址)。

如果您在IIS中託管,您的服務地址由您的SVC文件所在的虛擬目錄以及SVC文件本身定義 - 您可能無法定義特定端口或任何其他內容(IIS將處理那)。

所以嘗試連接到

http://localhost/Services/Service1.svc 

是否任何機會的工作?

更新:再次仔細閱讀您的文章,您正在指定一個專門的服務工廠 - WebServiceHostFactory。這是.NET提供的默認WebServiceHostFactory,還是你自己構建的東西?

的一點是:在.NET WebServiceHostFactory將使用webHttpBinding REST風格的WCF服務 - 這將不與端點指定basicHttpBinding工作,也將REST服務有任何元數據....

更新#2:儘量只在SVC文件和配置文件中使用服務的全限定類名,但不使用匯編規範。

所以更改此設置:

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

這樣:

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

SVC文件:

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

配置文件:

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

是的,我使用.svc來託管服務。當我用鼠標右鍵單擊並在瀏覽器中查看時,情況與此相同。 – chief7 2010-10-03 00:43:40

+1

添加空地址,不變。 試過url沒有端口,收到「Internet Explorer無法顯示網頁」 這是一個特殊的工廠,但我試過使用標準主機工廠,並得到了相同的錯誤 – chief7 2010-10-03 00:43:43

+1

@ Chief7:只要你不能做「View in瀏覽器「,您的服務有一個主要問題,只要這不起作用,您將無法啓動該服務。更新了我的答案,並提供了一些更多的建議來嘗試 – 2010-10-03 07:28:45

0

我對我的WCF服務的web.config是你的差不多。你必須像西拉說的那樣添加MEX端點。我添加了一個允許任何消息大小通過WCF的行爲配置。嘗試使用這些設置,如果它可以幫助你(不要忘記更改合同設置):

<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

您也可以使用Visual Studio文件夾中的WcfTestClient.exe輕鬆測試(Visual Studio 10.0 \ Common7 \ IDE \ WcfTestClient.exe和http://msdn.microsoft.com/en-us/library/bb552364.aspx)。你需要一個可用的MEX端點。 – 2010-10-06 14:44:51

+1

我定義了一個mex點並嘗試將該服務添加到wcftestclient。我說服務已成功添加,但沒有服務添加到列表中。 – chief7 2010-10-09 03:44:24

4

在您的Solution Explorer中,您.svc通過使用「視圖標記」打開,確保你有這樣的:

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

哪裏Yourservice是你的命名空間和yourservice是創建了.svc的名字。

4

我有同樣的結果(端點未找到),當我把這個在瀏覽器窗口

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

然後,當我把整個網址的方法,它運行得很好。像這樣

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

在我的.svc文件我用這

Factory="System.ServiceModel.Activation.WebServiceHostFactory" 

我認爲,直到需要它的工廠不轉了終點。這就是爲什麼我們在瀏覽器中找不到Endpoint(?)。

以下是界面代碼中的方法簽名的樣子。

using System.ServiceModel.Web; 

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

我在webconfig中沒有任何東西。這裏有一些東西,但我認爲這是VS添加WCF服務模板。它看起來像這樣:

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