При размещении службы WCF REST в консольном приложении возникает ошибка при поиске имени контракта - PullRequest
1 голос
/ 23 сентября 2010

У меня есть служба WCF REST, которая работает из службы Windows (.NET 3.5). Чтобы упростить сборку и отладку, я бы хотел запустить его из консоли. Когда я делаю это, я настраиваю конечные точки в консольном приложении. Когда я создаю конечную точку, происходит сбой с этой ошибкой: «Не найдено имя контракта« IRestService »в списке контрактов, реализованных сервисом« System.RuntimeType »."

К моему интерфейсу присоединен [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 ]

4 голосов
/ 23 сентября 2010

Вместо этой строки,

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.

0 голосов
/ 23 сентября 2010

Попробуйте изменить эту строку:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...