2011-06-28 28 views
2

我正在學習WCF。我有一個ASP.NET MVC2網絡應用程序,我想從應用程序發送MIME格式的電子郵件,所以我想我會將電子郵件功能封裝在一個單獨的WCF項目中以供將來重用等。因此,我添加了一個WCF服務庫解決方案,編寫了電子郵件功能的編碼,向Web項目添加了服務引用,並且在VS內運行時,它都可以正常工作。但是,如果我從瀏覽器窗口(而不是通過Visual Studio'F5')訪問Web應用程序,則WCF服務不起作用。我得到以下錯誤:WCF服務庫僅適用於從Visual Studio運行時

Unable to connect to the remote server at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context) at System.Net.HttpWebRequest.GetRequestStream() at System.ServiceModel.Channels.HttpOutput.WebRequestHttpOutput.GetOutputStream() No connection could be made because the target machine actively refused it 127.0.0.1:8732 at System.Net.Sockets.Socket.DoConnect

在Web應用程序的web.config文件進行了修訂(通過WCF)如下:

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="WSHttpBinding_IEmailService" closeTimeout="00:01:00" 
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
      bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
      maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" 
      textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> 
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
      maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      <reliableSession ordered="true" inactivityTimeout="00:10:00" 
      enabled="false" /> 
      <security mode="Message"> 
      <transport clientCredentialType="Windows" proxyCredentialType="None" 
       realm="" /> 
      <message clientCredentialType="Windows" negotiateServiceCredential="true" 
       algorithmSuite="Default" /> 
      </security> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:8732/Design_Time_Addresses/Email/EmailService/" 
     binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IEmailService" 
     contract="EmailServiceReference.IEmailService" name="WSHttpBinding_IEmailService"> 
     <identity> 
      <dns value="localhost" /> 
     </identity> 
     </endpoint> 
    </client> 
    </system.serviceModel> 

什麼我需要做的就是應用+服務在VS2010之外工作?另外,當我最終部署到我們的服務器時,任何部署提示都將不勝感激。

謝謝。

編輯 感謝您的所有答案。鑑於我打算在網絡上部署它,我應該創建一個單獨的Web應用程序或Web服務,然後引用服務庫,然後我將在適當的時候部署到獨立的Web服務器?

回答

1

原因是當你用F5運行你的wcf服務時會自動託管WcfSvcHost.exe。但是,當直接通過本地主機訪問網頁(沒有託管wcf服務託管),你會得到這個錯誤。你需要做的是在IIS(或其他任何地方)首先託管wcf,然後使用web應用程序。

Here是託管您的wcf服務的選項。

+0

要解決這個問題,並且考慮到我最終希望部署到獨立於主Web應用程序的Web服務器,我應該創建第三個VS項目(網站項目)(並添加到此解決方案) WCF服務的主機?打包WCF服務的最佳方法是什麼,以便我可以在本地和生產Web服務器上運行?謝謝 – DEH

+0

你在想什麼是正確的。您可以將您的網站和wcf服務打包到兩個不同的虛擬目錄中。但請記住,選擇IIS來承載WCF會限制傳輸協議......但考慮到您的情況,這應該不是什麼大問題。 – Illuminati

3

如果您將服務部署到本地計算機,最有可能服務運行的端口被防火牆阻止,或者您正在查看錯誤的端口。不要忘記在部署服務時,端口可能與開發環境使用的端口不同。

此外,也許更重要的是,您是否實際將服務部署到本地計算機?當開發環境運行時(F5),它啓動一個小版本的IIS來運行你的服務。當你試圖在開發環境之外運行時,這種情況不會發生。你需要在任何地方部署WCF服務(或者你的機器用於測試或者另一個)。然後你會知道它在監聽什麼端口,並且你可以正確地連接你的環境。這聽起來像你可能沒有完成這一步,這是造成你的問題。

這裏是如何部署一個WCF服務大演練教程:

http://www.dotnetspark.com/kb/1679-how-to-host-wcf-services-tutorial.aspx

1

WCF服務庫是WCF服務類,合同等,這是不是一種服務只是項目。當您從Visual Studio運行應用程序時,它將看到該服務並將其託管在WcfSvcHost.exe(用於開發的輔助工具)中,但在實際運行情況下爲you must host the service yourselves

相關問題