WCF. Add Service Reference не видит сервис

240
08 июля 2017, 07:08

Вот контракт и класс, его наследующий

 [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();
            }
Answer 1

Написал вам небольшой пример, как можно реализовать сервисную и клиентскую часть.

Сервисные контракты:

[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();
}
READ ALSO
Странное рисование отрезка

Странное рисование отрезка

Почему вnet winforms не получается нарисовать отрезок из одного угла формы в другой? Следующий код:

157
Как можно выбрать и преобразовать файл в base64?

Как можно выбрать и преобразовать файл в base64?

Хочу по нажатию кнопки открывать проводник для выбора файла (FileOpenPicker) и после этого преобразовывать выбранный файл в base64Никак не получается...

176
Как модифицировать список аргументов callback?

Как модифицировать список аргументов callback?

Здравствуйте, помогите пожалуйста с такой вот задачейСуть вкратце: необходимо передать свежесозданный аргумент в функцию, которая уже существует

263