2012-04-27 216 views
2

我想創建一個WCF Web服務,它將允許其他應用程序通過向此服務URL發出http請求來檢索字符串。我試圖發佈在IIS服務和嘗試瀏覽到它的時候,使用的URL,它說,它WCF web服務部署後不工作

' The resource cannot be found' 

,當我檢查的路徑,我使用的URL, 的文件夾和我得到的錯誤

'No protocol binding matches the given address 
'http://localhost:xxxx/WcfSampleLibrary/Service1/mex.' 
Protocol bindings are configured at the Site level in IIS or WAS configuration' 

這裏是發佈的文件夾的目錄路徑:

C:\inetpub\wwwroot\WcfServices\WcfSampleLibrary\WcfSampleLibrary.Service1 
C:\inetpub\wwwroot\WcfServices\WcfSampleLibrary\Web.config 
C:\inetpub\wwwroot\WcfServices\WcfSampleLibrary\bin\WcfSampleLibrary.dll 

的網絡配置文件:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 

<system.web> 
    <compilation debug="true" /> 
</system.web> 
<system.serviceModel> 
<services> 
    <service name="WcfSampleLibrary.Service1" behaviorConfiguration ="mex"> 
    <host> 
     <baseAddresses> 
     <add baseAddress = "http://192.xxx.x.xxx/WcfSampleLibrary/Service1/" /> 
     </baseAddresses> 
    </host> 
    <!-- Service Endpoints --> 
    <endpoint address ="" 
     binding="wsHttpBinding" contract="WcfSampleLibrary.IService1"> 
    <identity> 
     <dns value="localhost"/> 
     </identity> 
    </endpoint> 
    <!-- Metadata Endpoints --> 
    <endpoint address="http://localhost:xxxx/WcfSampleLibrary/Service1/mex" name="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="mex"> 
    <serviceMetadata httpGetEnabled="false"/> 
     <!-- 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="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

+0

您在同一臺機器上將它發佈到IIS並設置爲偵聽端口'xxxx'? – mellamokb 2012-04-27 13:46:02

+0

您的baseAddress與您的服務端點地址不同。通常你可以一起省略baseAddress。 – Filburt 2012-04-27 13:49:46

+0

我沒有設置端口,但只想使用服務器的IP地址;它設置端口本身 – vbNewbie 2012-04-27 13:50:24

回答

3

在IIS託管WCF服務,您不要在地址指定一個完整的URI。 IIS決定地址。當在IIS中託管時,baseAddresses元素也被完全忽略(因此將其從Web.config中移除)。

<endpoint 
    address="mex" 
    binding="mexHttpBinding" 
    contract="IMetadataExchange" 
    /> 

然後你的地址是http://IIS.SERVER/SiteName/Folder/WcfSampleLibrary.Service1.svc:該服務的基地址由入您的WCF服務placed.Do像這樣的網站&虛擬目錄確定。如果您不確定地址是什麼,請使用您的IIS管理工具,選擇其中包含服務的站點,右鍵單擊並選擇高級 - >瀏覽站點。另外,如果你想發佈你的WSDL,我會打開mex行爲的httpGetEnabled。這使得它更容易消耗你的服務,你正在開發它:

<behaviors> 
    <serviceBehaviors> 
    <behavior name="mex" > 
     <serviceMetadata httpGetEnabled="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

隨着httpGetEnabled處於打開狀態,瀏覽到您的服務URI會給你一個選項,以查看WSDL。

+0

感謝您的解釋...我嘗試了更改,現在我得到錯誤:Web服務器被配置爲不列出此目錄的內容。當使用IIS中的瀏覽網站時。當我手動輸入瀏覽器中的整個網址時,它會返回無法找到的資源...這只是一個安全/共享問題。另外, – vbNewbie 2012-04-27 14:13:49

+0

IT可能不會列出目錄的內容(您可以在IIS管理員中將其打開),但至少您可以獲取Web服務器用來託管它的URI。 Web文件夾中有哪些文件?你有一個'ServiceName.svc'文件嗎? – 2012-04-27 16:03:17

+0

服務文件不在Web文件夾中;我在主文件夾中的bin文件夾和web.config文件中有WcfSampleLibrary.dll。我應該手動添加服務文件嗎? – vbNewbie 2012-04-30 13:25:37