此错误的文本经常在Stack Overflow上报告,但没有一个解决方案适用于我们的情况。 有问题的代码不能简单。它来自Microsoft {IIS}托管的WCF服务示例(一个简单的计算器服务),位于[http://msdn.microsoft.com/en-us/library/ms733766%28v=vs.110%29.aspx] 1
错误的要点是经常报告的"无法找到作为服务属性值[...]提供的类型[...]。"我附上了完整错误文本的屏幕快照。这里还有我的服务和配置文件,接口和代码的代码示例。
为了它的价值,我得到了相同的#34;提供的类型无法找到"我尝试使用Microsoft描述的方法在IIS中托管的任何WCF服务的错误。这些都很简单"你好世界"程式。我们已经尝试将代码移动到建筑物中的其他机器并在那里托管,但我们得到了同样的错误。我们已经尝试过使用Windows 2003 Server和Windows 8.我们正在使用.Net 4.5 Framework在VS 2013中进行开发。
任何和所有帮助表示赞赏......
Service.svc:
<%@ServiceHost language=c# Debug="true" Service="Microsoft.ServiceModel.Samples.CalculatorService"%>
ICalculatorService.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System;
using System.ServiceModel;
namespace Microsoft.ServiceModel.Samples
{
[ServiceContract]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}
}
CalculatorService.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System;
using System.ServiceModel;
namespace Microsoft.ServiceModel.Samples
{
public class CalculatorService : ICalculator
{
public double Add(double n1, double n2)
{
return n1 + n2;
}
public double Subtract(double n1, double n2)
{
return n1 - n2;
}
public double Multiply(double n1, double n2)
{
return n1 * n2;
}
public double Divide(double n1, double n2)
{
return n1 / n2;
}
}
}
的web.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>
错误:
最后,我通过inetmgr添加了一个指向我的应用程序位置的IIS应用程序:
在此处找到:
答案 0 :(得分:0)
尝试使用CalculatorService
- 属性来装饰[ServiceBehavior]
类。
namespace Microsoft.ServiceModel.Samples
{
[ServiceBehavior]
public class CalculatorService : ICalculator
{
//...
答案 1 :(得分:0)
哎呀!所以显然有一个相对于服务文件的默认位置,当放置程序集时,所有工作都应该如此。 将程序集放在包含.svc文件的文件夹的\ bin子文件夹中,可以生成有效的服务。
正如您所料,编译器在[projectfolder] \ bin \ debug或[projectfolder] \ bin \ release中生成CalculatorService.dll。使用[projectfolder]中的.svc文件,您会收到错误。
只需将dll上移一级到\ bin文件夹即可解决问题。这似乎有点违反直觉......我想如果这是一个默认的文件夹问题,那么将.svc文件放在与.dll相同的位置更有意义。微软的例子确实没有给出任何线索。无论如何,为了将来参考,以下是从微软网站上获取的代码示例:
.svc文件的位置:
装配的位置:
IIS配置为指向.svc文件的位置,如原始问题描述中所述:
根据Microsoft文章浏览到URL,我们现在看到了我们希望的内容: