Ошибка конечной точки WCF от службы, размещенной самостоятельно
Я получаю "Конечная точка не найдена" при вызове службы WCF. Это самостоятельная служба в консольном приложении.
Вот мой код:
IService.cs
namespace ClassLibrary
{
[ServiceContract]
public interface IService
{
[OperationContract]
[WebGet]
string GetMessage(string inputMessage);
[OperationContract]
[WebInvoke]
string PostMessage(string inputMessage);
}
}
Service.cs
namespace ClassLibrary
{
public class Service : IService
{
public string GetMessage(string inputMessage)
{
return "En GetMessage llega " + inputMessage;
}
public string PostMessage(string inputMessage)
{
return "En PostMessage llega " + inputMessage;
}
}
}
И консольное приложение:
namespace ConsoleHost
{
class Program
{
static void Main(string[] args)
{
WebServiceHost host = new WebServiceHost(typeof(Service), new Uri("http://localhost:8000"));
ServiceEndpoint ep = host.AddServiceEndpoint(typeof(IService), new WebHttpBinding(), "");
ServiceDebugBehavior db = host.Description.Behaviors.Find<ServiceDebugBehavior>();
db.HttpHelpPageEnabled = false;
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
host.Description.Behaviors.Add(smb);
host.Open();
Console.WriteLine("Service is up and running");
Console.WriteLine("Press enter to quit ");
Console.ReadLine();
host.Close();
}
}
}
Конфигурационного файла нет, потому что он есть в коде.
И звонок в сервис:
http://localhost:8000/
Любая помощь приветствуется. Спасибо!
2 ответа
Пара вещей. Услуги, размещенные с WebServiceHost
не публикуйте метаданные, поэтому не пытайтесь получить WSDL только с именем службы.
Поскольку это WebGet, вы вызываете метод Get по умолчанию при вводе имени службы, поэтому вы должны указать все необходимые параметры в URL. Однако это не сработает, пока вы не укажете форму запроса в договоре. Сделайте это, изменив строку WebGet следующим образом:
[WebGet(UriTemplate = "{inputMessage}")]
Да, свойство атрибута должно соответствовать формальному параметру операции GetMessage(), в данном случае "inputMessage"
Когда служба запущена, введите следующий URL в браузер, чтобы убедиться, что служба работает:
http://localhost:8000/hello
Вы должны получить что-то вроде:
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
En GetMessage llega hello</string>
Я нахожу это для вас WCF REST Self-Hosted 400 Bad Request Эффективно вы разрабатываете службу REST, и для этого есть две вещи, которые нужно знать: 1- вам не нужно добавлять EndPoint и Behaviors при использовании WebServiceHost 2- Rest Services не выставлен wsdl, так что вы не можете добавить ссылку на службу из VS, например.