C# 无法使用IIS承载WCF服务
我正在使用指南在IIS中托管我的简单WCF服务。但当我尝试在Internet Explorer中测试它时,出现了以下错误: 我在IIS管理器中的默认网站下创建了一个名为“IISHostedWCFService”的文件夹,并在其中添加了一个名为“IISHostedService”的应用程序。我还使用以下代码创建了Service.svc文件:C# 无法使用IIS承载WCF服务,c#,.net,wcf,iis,C#,.net,Wcf,Iis,我正在使用指南在IIS中托管我的简单WCF服务。但当我尝试在Internet Explorer中测试它时,出现了以下错误: 我在IIS管理器中的默认网站下创建了一个名为“IISHostedWCFService”的文件夹,并在其中添加了一个名为“IISHostedService”的应用程序。我还使用以下代码创建了Service.svc文件: <%@ ServiceHost Language="C#" Debug="true" Service="CalculatorService" %>
<%@ ServiceHost Language="C#" Debug="true" Service="CalculatorService" %>
<?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>
我认为这可能是一个名称空间问题,因为我不确定我的名称空间应该是什么,我很困惑
我是WCF的初学者,我非常感谢您对使用IIS托管WCF的任何意见或建议。
多谢各位
更新1:
多亏了Ric.Net的回答,我对namesapces有了更好的理解,但我仍然得到了服务器错误。
我按照Ric.Net的建议更新了Service.svc和App.config文件,还设置了
<service name="CalculatorService.CalculatorService">
以下是新的错误:
你的道路是正确的。据我所知,这是一个名称空间问题 ISS/WCF需要具有
ServiceContract
属性的类或接口的全名。它还需要实现ServiceContract
的实现的全名
查看提供的代码,这将是:
CalculatorService.ICalculator
和用于实现的CalculatorService.CalculatorService
您的svc文件将变成:
ServiceHost Language=“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) 在配置文件中,将service标记的name属性更改为CalculatorService.CalculatorService,如下所示:
<service name="CalculatorService.CalculatorService">
<endpoint address=""
binding="wsHttpBinding"
contract="CalculatorService.ICalculator" />
3) 在配置文件中,再次将端点的契约属性更改为接口的正确路径,如下所示:
<service name="CalculatorService.CalculatorService">
<endpoint address=""
binding="wsHttpBinding"
contract="CalculatorService.ICalculator" />
经过数小时的测试,我终于找到了答案: 我用来在IIS中启动和运行WCF的指南不准确,缺少了一些东西,是.dll文件。我只是创建了一个名为“bin”的文件夹,并在其中复制了我的WCF service.dll文件,它工作得非常好。
谢谢大家的回答。因为
PrintScreen
太主流了?哈哈,我连续工作了5个小时,我想我的大脑出现了异常:谢谢你们的回答,我做了这些更改,但仍然会看到服务器错误页,这次是CalculatorService.CalculatorService类型。我还检查了Visual Studio中的类视图,我相信您建议的名称空间是正确的,但我仍然看到错误页面。您是否重置了与站点关联的应用程序池?请暂时删除mexBinding,因为您现在不使用它,所以让我们保持简单。关于重置应用程序池,我不确定如何以及为什么重置它