聲明:本文系作者原創,轉載請聲明轉自http://home.cnblogs.com/u/sunt2012/ 謝謝合作
今天開始學習WCF,參照網上的CalculatorService做了個例子,結果發現在IIS上發布不了,總是提示錯誤:
無法找到 ServiceHost 指令中作為服務屬性值提供的類型“Services.CalculatorService”。
說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以了解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。
異常詳細信息: System.InvalidOperationException: 無法找到 ServiceHost 指令中作為服務屬性值提供的類型“Services.CalculatorService”。
源錯誤:
執行當前 Web 請求期間生成了未處理的異常。可以使用下面的異常堆棧跟蹤信息確定有關異常原因和發生位置的信息。
堆棧跟蹤:
[InvalidOperationException: 無法找到 ServiceHost 指令中作為服務屬性值提供的類型“Services.CalculatorService”。] System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses) +4214245 System.ServiceModel.HostingManager.CreateService(String normalizedVirtualPath) +516 System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +31 System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +498 [ServiceActivationException: 由於編譯過程中出現異常,無法激活服務“/WcfServices/CalculatorService.svc”。異常消息為: 無法找到 ServiceHost 指令中作為服務屬性值提供的類型“Services.CalculatorService”。。] System.ServiceModel.AsyncResult.End(IAsyncResult result) +4437753 System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +183 System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, Boolean flowContext) +205 System.ServiceModel.Activation.HttpModule.ProcessRequest(Object sender, EventArgs e) +322 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +92 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +64
主要原因就是您直接將WCF項目(類庫)部署到了IIS,部署到IIS的項目應該是WEB應用程序,應該按照WEB應用程序的方式部署至IIS,j簡單來說就是您打開部署到虛擬目錄,會發現Bin目錄下沒有任何文件,在Web應用程序中,所以得dll文件應該在Bin目錄下,這是和WinFOrm不同的地方,最簡單的解決方案是把Bin/Debug目錄下的dll文件拷貝到Bin目錄下,即可解決問題。
理想個解決方案(僅代表個人)應該是按照Web開發模式,在項目中添加一個Web應用程序,任何添加Service的引用,在把相應的config文件和svc文件拷貝到目錄,在部署到iis上。結構圖如下
