我有一个可以从Windows服务(.NET 3.5)运行的WCF REST服务。为了更容易构建和调试,我想从控制台运行它。当我这样做时,我在控制台应用程序中设置端点。当我创建一个端点时,它失败并出现此错误: “在服务'System.RuntimeType'实现的合同列表中找不到合同名称'IRestService'。”
我的界面附有[ServiceContract]:
namespace RestServiceLibrary
{
[ServiceContract]
public interface IRestService
...
以下是控制台应用:
namespace RestServiceConsole
{
class Program
{
static void Main(string[] args)
{
WebServiceHost2 webHost = new WebServiceHost2(typeof(RestService), new Uri("http://localhost:8082"));
ServiceEndpoint ep = webHost.AddServiceEndpoint(typeof(IRestService), new WebHttpBinding(), "");
ServiceDebugBehavior stp = webHost.Description.Behaviors.Find<ServiceDebugBehavior>();
stp.HttpHelpPageEnabled = false;
webHost.Open();
Console.WriteLine("Service is up and running");
Console.WriteLine("Press enter to quit ");
Console.ReadLine();
webHost.Close();
}
}
}
为什么我收到此错误?我该如何解决?
答案 0 :(得分:4)
而不是这一行,
WebServiceHost2 webHost = new WebServiceHost2(typeof(RestService), new Uri("http://localhost:8082"));
应该是
WebServiceHost2 webHost = new WebServiceHost2(typeof(RestService), true, new Uri("http://localhost:8082"));
WebServiceHost2有两个构造函数,您正在调用期望服务实例的构造函数。这就是它在System.RuntimeType中寻找合同的原因。
答案 1 :(得分:0)
尝试更改此行:
ServiceEndpoint ep = webHost.AddServiceEndpoint(typeof(IRestService),
new WebHttpBinding(), "");
对此:
ServiceEndpoint ep = webHost.AddServiceEndpoint(typeof(RestServiceLibrary.IRestService),
new WebHttpBinding(), "");
有时它需要一个完全限定的名称。
http://aspdotnethacker.blogspot.com/2010/06/contract-name-could-not-be-found-in.html