在控制台应用程序中托管WCF REST服务时,错误查找合同名称

时间:2010-09-22 20:10:36

标签: .net wcf rest

我有一个可以从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();

        }
    }
}

为什么我收到此错误?我该如何解决?

2 个答案:

答案 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