C# 无法使用IIS承载WCF服务

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" %>

我正在使用指南在IIS中托管我的简单WCF服务。但当我尝试在Internet Explorer中测试它时,出现了以下错误:

我在IIS管理器中的默认网站下创建了一个名为“IISHostedWCFService”的文件夹,并在其中添加了一个名为“IISHostedService”的应用程序。我还使用以下代码创建了Service.svc文件:

<%@ 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,因为您现在不使用它,所以让我们保持简单。关于重置应用程序池,我不确定如何以及为什么重置它