Вот контракт и класс, его наследующий
[ServiceContract]
public interface ISimpleService
{
[OperationContract]
string GetUserName();
}
public class SimpleService : ISimpleService
{
public string GetUserName()
{
Console.WriteLine("Is Authenticated: " +
ServiceSecurityContext.Current.PrimaryIdentity.IsAuthenticated);
Console.WriteLine("Authentication Type: " +
ServiceSecurityContext.Current.PrimaryIdentity.AuthenticationType);
Console.WriteLine("Username: " +
ServiceSecurityContext.Current.PrimaryIdentity.Name);
return "Authenticated User Name: " +
ServiceSecurityContext.Current.PrimaryIdentity.Name;
}
}
Вот конфиг
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="mexBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="mexBehavior" name="SimpleService.SimpleService">
<endpoint address="SimpleService"
binding="wsHttpBinding"
contract="SimpleService.ISimpleService"/>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
Код консольного хоста, в котором находится конфиг
public static void Main()
{
using (ServiceHost host = new ServiceHost(typeof(SimpleService.SimpleService)))
{
host.Open();
Console.WriteLine("Host started @ " + DateTime.Now.ToString());
Console.ReadLine();
}
Написал вам небольшой пример, как можно реализовать сервисную и клиентскую часть.
Сервисные контракты:
[ServiceContract]
public interface ISimpleService
{
[OperationContract]
string GetUserName(string name);
}
public class SimpleService : ISimpleService
{
public string GetUserName(string name)
{
return name + " --> " DateTime.Now.ToString(CultureInfo.InvariantCulture);
}
}
Сервисная часть (хост):
static void Main(string[] args)
{
using (var host = new ServiceHost(typeof(SimpleService), new Uri("http://localhost:8088/hello")))
{
// Включае мпубликацию метаданных, для того что бы студия смогла
// сгенерировать клиент.
var smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.Description.Behaviors.Add(smb);
// Открываем сервисный хост.
host.Open();
Console.WriteLine("Сервис запущен {0}", new Uri("http://localhost:8088/hello"));
Console.WriteLine("Нажмите любую клавишу для остановки сервиса.");
Console.ReadLine();
// Закрываем хост.
host.Close();
}
}
Далее необходимо выполнить резервировании указанного URL адреса, делается это путем выполнения команды:
netsh http add urlacl url=http://+:8088/hello user=UserName
Если в последствии необходимо будет выполнить удаление резервирования URL-адреса WCF следует воспользоваться командой:
netsh http delete urlacl url=http://+:8088/hello
Альтернативный способ обойтись без резервирования URL заключается в создании файла app.manifest
и указания в узле security
необходимого уровня привилегий:
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- Указываем необходимый уровень привилегий -->
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
Клиентская часть:
Затем в проекте с клиентской частью для автоматической генерации сервисного клиента делаем: правый клик на References --> add service reference
- в поле Address
указываем http://localhost:8088/hello
. Обратите внимание, что серверная часть перед этим уже должна быть запущена.
После того, как студия создаст сервисного клиента, просто его используем:
static void Main(string[] args)
{
var client = new SimpleServiceClient();
Console.WriteLine(client.GetUserName("Вася"));
Console.ReadKey();
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Почему вnet winforms не получается нарисовать отрезок из одного угла формы в другой? Следующий код:
Хочу по нажатию кнопки открывать проводник для выбора файла (FileOpenPicker) и после этого преобразовывать выбранный файл в base64Никак не получается...
Здравствуйте, помогите пожалуйста с такой вот задачейСуть вкратце: необходимо передать свежесозданный аргумент в функцию, которая уже существует