[英]Unable to Host a WCF service using IIS
我正在使用本指南在IIS中托管我的簡單WCF服務。 但是當我嘗試在Internet Explorer中對其進行測試時出現此錯誤:
我在IIS管理器中的“默認網站”下創建了一個名為“ IISHostedWCFService”的文件夾,並在其中添加了一個名為“ IISHostedService”的應用程序。 我還使用以下代碼創建了Service.svc文件:
<%@ ServiceHost Language="C#" Debug="true" Service="CalculatorService" %>
帶有以下代碼的App.config文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<!-- This section is optional with the default configuration
model introduced in .NET Framework 4 -->
<service name="Microsoft.ServiceModel.Samples.CalculatorService">
<!-- This endpoint is exposed at the base address provided by host: http://localhost/servicemodelsamples/service.svc -->
<endpoint address=""
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
<!-- The mex endpoint is exposed at http://localhost/servicemodelsamples/service.svc/mex -->
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
</configuration>
我還創建了一個名為App_Code的文件夾,並在其中創建了Service.cs,其中包括我的源代碼:
using System;
using System.ServiceModel;
namespace CalculatorService
{
[ServiceContract]
public interface ICalculator
{
[OperationContract]
double add(double n1, double n2);
[OperationContract]
double multiply(double n1, double n2);
}
public class CalculatorService : ICalculator
{
public double add(double n1, double n2)
{
return n1 + n2;
}
public double multiply(double n1, double n2)
{
return n1 * n2;
}
}
}
我認為這可能是一個名稱空間問題,因為我不確定我的名稱空間應該是什么,我很困惑。
我是WCF的初學者,非常感謝使用IIS托管WCF的任何意見或建議。 謝謝
UPDATE1:多虧了Ric .Net的回答,我對名稱空間有了更好的了解,但仍然出現服務器錯誤。 我按照Ric.Net的建議更新了Service.svc和App.config文件,還設置了
<service name="CalculatorService.CalculatorService">
您以正確的方式。 從您發布的內容來看,這是一個名稱空間問題。
ISS / WCF需要具有ServiceContract
屬性的類或接口的全名。 它還需要實現ServiceContract
的實現的全名。
查看提供的代碼,該代碼將是: CalculatorService.ICalculator
以及實現CalculatorService.CalculatorService
的實現。
您的svc文件將變為:
ServiceHost語言=“ C#” Debug =“ true” Service =“ CalculatorService.CalculatorService”
和配置:
<endpoint address=""
binding="wsHttpBinding"
contract="CalculatorService.ICalculator" />
但是我不確定100%,因為您可以在項目設置中進行全局更改。 您可以通過打開“類視圖”窗口來檢入Visual Studio。 這將為您顯示解決方案中項目的樹狀視圖。 找到定義了ICalculator
的項目,然后將您從根名稱空間擴展到接口/類。
請執行以下步驟來解決它:
1)在服務標記中,將服務更改為CalculatorService.CalculatorService
<%@ ServiceHost Language="C#" Debug="true" Service="CalculatorService" %>
2)在您的配置文件中,將服務標簽的名稱屬性更改為CalculatorService.CalculatorService,如下所示:
<service name="CalculatorService.CalculatorService">
3)再次在配置文件中將端點的合同屬性更改為您的接口正確路徑,如下所示:
<endpoint address=""
binding="wsHttpBinding"
contract="CalculatorService.ICalculator" />
經過數小時的測試,我終於弄清楚了:我用來在IIS中啟動和運行WCF的指南不准確,缺少一些內容,它是.dll文件。 我只是創建了一個名為“ bin”的文件夾,並在其中復制了WCF服務.dll文件,它運行良好。 謝謝大家的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.