无法使用IIS托管WCF服务

时间:2015-09-20 13:41:27

标签: c# .net wcf iis

我正在使用this指南在IIS中托管我的简单WCF服务。但是当我尝试在Internet Explorer中测试时,我收到此错误: Here is the error image

我在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的回答,我对名字有了更好的理解,但我仍然遇到服务器错误。 我更新了我的Service.svc和App.config文件,正如Ric.Net建议的那样,我也设置了

<service name="CalculatorService.CalculatorService">

这是新的错误: New Error

3 个答案:

答案 0 :(得分:2)

你正确的方式。从我发布的内容中可以看出,这是一个名称空间问题。

ISS / WCF需要具有ServiceContract属性的类或接口的全名。它还需要实现ServiceContract

的实现的全名

查看提供的代码,这将是: CalculatorService.ICalculator以及实施CalculatorService.CalculatorService

你的svc文件会变成:

ServiceHost Language =&#34; C#&#34;调试=&#34;真&#34;服务=&#34; CalculatorService.CalculatorService&#34;

和配置:

    <endpoint address=""
              binding="wsHttpBinding"
              contract="CalculatorService.ICalculator" />

但我无法100%确定,因为您可以在项目设置中进行全局更改。您可以通过打开“班级”视图来检查Visual Studio&#39;窗口。这将显示解决方案中项目的树视图。找到定义ICalculator的项目,并将您从根命名空间扩展到接口/类。

答案 1 :(得分:0)

执行以下步骤解决问题:

1)在服务标记中,将服务更改为CalculatorService.CalculatorService

<%@ ServiceHost Language="C#" Debug="true" Service="CalculatorService" %>

2)在配置文件中,将服务标签的name属性更改为CalculatorService.CalculatorService,如下所示:

<service name="CalculatorService.CalculatorService">

3)再次在配置文件中将端点更改为您的接口右路径的合同属性,如下所示:

<endpoint address=""
          binding="wsHttpBinding"
          contract="CalculatorService.ICalculator" />

答案 2 :(得分:0)

经过数小时和数小时的测试后,我终于明白了: 我用来在IIS中启动和运行WCF的指南不准确,有些东西丢失了,它是.dll文件。我只是创建了一个名为“bin”的文件夹,然后我将 WCF服务.dll 文件复制到其中,它完美无缺。 谢谢大家的答案。