Мои первые несколько попыток создания сам размещенный сервис. Попытка сделать что-то, которое примет строку запроса и возвратит некоторый текст, но иметь, имеет несколько проблем:
Вся документация говорит о конечных точках, создаваемых автоматически для каждого базового адреса, если они не найдены в файле конфигурации. Это, кажется, не имеет место для меня, я добираюсь, "Сервис имеет нулевые конечные точки приложения..." исключение. Вручную определение основной конечной точки как ниже, кажется, разрешает это:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Description;
namespace TestService
{
[ServiceContract]
public interface IHelloWorldService
{
[OperationContract]
string SayHello(string name);
}
public class HelloWorldService : IHelloWorldService
{
public string SayHello(string name)
{
return string.Format("Hello, {0}", name);
}
}
class Program
{
static void Main(string[] args)
{
string baseaddr = "http://localhost:8080/HelloWorldService/";
Uri baseAddress = new Uri(baseaddr);
// Create the ServiceHost.
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
{
// Enable metadata publishing.
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.Description.Behaviors.Add(smb);
host.AddServiceEndpoint(typeof(IHelloWorldService), new BasicHttpBinding(), baseaddr);
host.AddServiceEndpoint(typeof(IHelloWorldService), new BasicHttpBinding(), baseaddr + "SayHello");
//for some reason a default endpoint does not get created here
host.Open();
Console.WriteLine("The service is ready at {0}", baseAddress);
Console.WriteLine("Press <Enter> to stop the service.");
Console.ReadLine();
// Close the ServiceHost.
host.Close();
}
}
}
}
Как был бы я идти об установке этого для возвращения значения имени в SayHello (имя строки) при необходимости таким образом: localhost:8080/HelloWorldService/SayHello? name=kyle
Я пытаюсь идти перед выполнением, но это просто походит на проверку...
На ваш вопрос о том, что конечные точки по умолчанию не добавляются:
Посмотрите эту статью библиотеки MSDN для получения дополнительной информации о Что нового в WCF 4 для разработчиков. В ней, среди прочего, показано, как использовать конечные точки по умолчанию - вы в основном определяете базовый адрес для вашей службы и открываете ServiceHost - вот и все!
string baseaddr = "http://localhost:8080/HelloWorldService/";
Uri baseAddress = new Uri(baseaddr);
// Create the ServiceHost.
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
{
//for some reason a default endpoint does not get created here
host.Open();
// here, you should now have one endpoint for each contract and binding
}
Вы также можете добавить конечные точки по умолчанию в явном виде, в коде, если хотите это сделать. Поэтому, если вам нужно добавить свои собственные конечные точки, но затем вы хотите добавить системные конечные точки по умолчанию, вы можете использовать:
// define and add your own endpoints here
// Create the ServiceHost.
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
{
// add all the system default endpoints to your host
host.AddDefaultEndpoints();
//for some reason a default endpoint does not get created here
host.Open();
// here, you should now have your own endpoints, plus
// one endpoint for each contract and binding
}
Я также fonud этот пост блога здесь, чтобы быть довольно освещающим - блог Кристофера полон хороших и очень полезных постов WCF - очень рекомендую.
Что касается книг - вот моя рекомендация: книга, которую я всегда рекомендую для быстрого освоения WCF - это Learning WCF Мишеля Леру Бустаманте. Она охватывает все необходимые темы, причем в очень понятной и доступной форме. Она научит вас всему - основам, промежуточным темам, безопасности, управлению транзакциями и так далее - что вам необходимо знать для написания высококачественных, полезных WCF-сервисов.
Более продвинутые темы и более углубленный взгляд на WCF будут рассмотрены в Программирование WCF-сервисов Юваля Лоуи. Он действительно погружается во все технические детали и темы и представляет "библию" для программирования WCF.
Если ваш веб-сервис размещен в IIS, вы получите понятную страницу «вы создали веб-сервис», если все остальное не в порядке. Возможно, вы захотите попробовать несколько быстрых руководств по WCF, которые можно найти в книге Bustamente Learning WCF, они быстро идут и многое объясняют.
РЕДАКТИРОВАТЬ: Вот страница MSDN , на которой показан один из способов получить параметры строки запроса из запрошенного вызова службы, хороший пример. Он показывает использование атрибута [WebGet]. Если вы не хотите использовать это, вы можете попробовать использовать OperationContext , чтобы получить доступ к внутренним компонентам входящего запроса.