我正在使用this指南在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的回答,我对名字有了更好的理解,但我仍然遇到服务器错误。 我更新了我的Service.svc和App.config文件,正如Ric.Net建议的那样,我也设置了
<service name="CalculatorService.CalculatorService">
答案 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 文件复制到其中,它完美无缺。 谢谢大家的答案。