2013-05-25 47 views
0

內這將是一個奇怪的問題,而是:建立一個WCF宿主一個網站項目

我目前運行在我的網站WCF服務(在Visual Studio 2012做 - .scv文件)。我有一個控制檯客戶端,除了內置的wcf測試客戶端之外,我嘗試測試連接。測試客戶端運行正常,我可以調用這些功能,但是當我停止運行站點/測試客戶端(這應該表示主機的擴展名,對嗎?),我的控制檯客戶端可以仍然運行並與服務很好。
我也可以訪問WCF服務頁面,但它並未在瀏覽器中運行。當我在控制檯中創建WCF時,在主機未實際運行時,我無法執行任何這些操作。正因爲如此,我想知道是否有什麼問題,我只是沒有看到代碼。

我可以看到這個發展成爲一個問題,當我嘗試上網的網站的服務器上(因爲我的測試客戶端將不位於同一臺計算機上的服務。我假設這種情況發生,因爲我即使它沒有運行,也可以訪問這些文件)。

我該怎麼做/出了什麼問題?

謝謝你的時間。

相關的web.config代碼:從控制檯客戶端

<system.serviceModel> 
    <services> 
<!-- ICanHasGamez=solution that holds the webpage&wcfservice --> 
     <service name="ICanHasGamez.APIHost" behaviorConfiguration="behavior"> 
     <endpoint address="" binding="basicHttpBinding" contract="ICanHasGamez.IAPIHost"> 
      <identity> 
      <dns value="localhost"/> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name ="behavior"> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
     multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 

的app.config代碼:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_IAPIHost" /> 
      </basicHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="http://localhost:2105/APIHost.svc" binding="basicHttpBinding" 
       bindingConfiguration="BasicHttpBinding_IAPIHost" contract="ServiceReference1.IAPIHost" 
       name="BasicHttpBinding_IAPIHost" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

回答

2

在您的網站項目的屬性Web選項卡,你在IIS託管其下?如果是這樣,即使您沒有使用內置的WCF測試客戶端,WCF服務也將繼續運行。 IIS在Visual Studio環境之外自行運行。如果你願意,你可以通過在IIS管理器中停止它來關閉你的服務,但除此之外,它可以在VS之外使用。

相比之下,運行在一個控制檯WCF服務(稱爲自託管)將關閉時,它的主機應用程序,即控制檯應用程序,關閉。

總之,如果你正在使用本地IIS爲您的web項目,那麼這是沒有什麼你做了錯誤的,是預期的行爲。關於在不同的機器上運行你的服務給你的測試客戶端,這不是問題。如果你在IIS中運行它,那麼你的主機只需要打開IIS並在那裏運行IIS。瞧!如果您以自行託管的方式運行該服務,即在控制檯中運行,請將控制檯保持打開狀態。請查看this StackOverflow question瞭解自託管的wcf vs IIS的一些優缺點(接受的答案對於特定的OP來說有點侷限,但下面的答案更具信息性)。

我希望這可以幫助,我希望我不會在這裏吠叫錯誤的樹。

+0

我不知道這件事(我對所有這些編程業務都是新鮮的)。它在「使用本地IIS Web服務器」下進行檢查。感謝您解決這個問題。你肯定不會在錯誤的樹上大吼大叫,它幫了我很多。我希望像這樣的問題不會被忽視(試圖解決一些問題以解決直接問題) - 但它有助於我理解事情的運作方式。編輯:編輯出一個問題。我不會打擾你,並在再次提出另一個問題之前嘗試查看它。 – user1339253

2

我沒有看到你描述的場景有什麼問題 - 它的預期行爲。

當主辦IIS WCF服務,只要IIS是建立和運行(並且沒有其他問題),你的服務可以接收請求。如果服務主機已被丟棄(由於不活動超時或其他原因),如果收到新的請求,IIS將啓動一個新實例。另一方面,如果您在例如控制檯應用程序中自行託管WCF服務,則服務能夠響應請求的唯一時間是自運行應用程序正在運行時。

所以要回答你的問題,你沒有做錯任何事情,你不需要做任何不同的事情。您應該能夠簡單地將WCF服務部署到遠程服務器,然後通過客戶端訪問它。

+0

感謝您解釋自主服務器與IIS之間的區別。在另一個答案中發表了更大的評論。 – user1339253