none
WCF RRS feed

  • Вопрос

  • Доброго времени. Извиняюсь, что оставил без ответа вот эту тему. Тема для меня новая и очень закопался. Вот набил код, написанный не мною и он у меня не работает, т.е. выскакивает ошибка "Не удалось подключиться к http://127.0.0.1:8080/EssentialWCF. Код ошибки TCP 10051: Сделана попытка выполнить операцию на сокете при
    отключенной сети 127.0.0.1:8080."

    Вот этот код Клиент

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ServiceModel;
    
    namespace Client
    {
        //Определяем контракт, т.е. пишется класс, который делает нечто полезное
        [ServiceContract] //этот атрибут WCF, он помечает класс как контракт. В терминах языка WSDL [ServiceContract] определяет тип порта
        public interface IStockService
        {
            [OperationContract] //этот атрибут WCF определяет методы класса, которые можно вызывать через интерефейс службы. Одновременно он определяет какие сообщения можно передать
            //этим методам и получить от них
            double GetPrice(string ticker);
        }
    
        class Client
        {
            static void Main()
            {
                ChannelFactory<IStockService> myChannelFactory = new ChannelFactory<IStockService>(new BasicHttpBinding(), new EndpointAddress("http://127.0.0.1:8080/EssentialWCF"));
                IStockService wcfClient = myChannelFactory.CreateChannel();
                double p = wcfClient.GetPrice("msft");
                Console.WriteLine("Price:{0}", p);
            }
        }
    }
    Служба
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ServiceModel;
    using System.ServiceModel.Description;
    
    
    namespace EssentialWCF
    {
        //Определяем контракт, т.е. пишется класс, который делает нечто полезное
        [ServiceContract] //этот атрибут WCF, он помечает класс как контракт. В терминах языка WSDL [ServiceContract] определяет тип порта
        public interface IStockService
        {
            [OperationContract] //этот атрибут WCF определяет методы класса, которые можно вызывать через интерефейс службы. Одновременно он определяет какие сообщения можно передать
                                //этим методам и получить от них
            double GetPrice(string ticker);
        }
    
        //Описание службы через создание класса
        public class StockService : IStockService
        {
            public double GetPrice(string ticker)
            {
                return 94.85;
            }
        }
    
        //Служба
        public class Service
        {
            public static void Main()
            {
                //ServiceHost предоставляет основное приложение для служб. Инициализирует новый экземпляр класса serviceHost с 
                //указанными экземпляром службы и базовыми адресами
                //ServiceHost serviceHost = new ServiceHost(typeof(StockService), new Uri("http://localhost:9000/EssentialWCF"));
                ServiceHost serviceHost = new ServiceHost(typeof(StockService));
    
                //Добавляет конечную точку службы в размещенную службу с указанными контрактом, привязкой и адресом конечной точки. 
                //serviceHost.AddServiceEndpoint(typeof(IStockService), new BasicHttpBinding(), "");
    
                //ServiceMetadataBehavior контролирует публикацию метаданных службы и связанной с ними информации
                ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
                //HttpGetEnabled возвращает или задает значение, указывающее, следует ли опубликовывать метаданные службы для извлечения с помощью запроса HTTP/GET. 
                //behavior.HttpGetEnabled = true;
    
                //Вызывает переход объекта связи из состояния Created в состояние Opened.
                serviceHost.Open();
    
                Console.WriteLine("Для завершения нажмите <ENTER>.\n\n");
                Console.ReadLine();
    
                //Вызывает переход объекта связи из текущего состояния в состояние Closed. 
                serviceHost.Close();
            }
        }
    }
    Файл конф службы
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <service name="EssentialWCF.StockService" behaviorConfiguration="myServiceBehavior">
            <host>
              <baseAddresses>
                <add baseAddress="http://127.0.0.1:8080/EssentialWCF"/>
              </baseAddresses>
            </host>
            <endpoint address="" binding="basicHttpBinding" contract="EssentialWCF.IStockService">
              
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange">
              
            </endpoint>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="myServiceBehavior">
              <serviceMetadata httpGetEnabled="True"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    Что у меня не так?
    Спасибо.

     


    • Изменено hochuznat 28 декабря 2011 г. 19:35
    28 декабря 2011 г. 19:31

Ответы

  • Доброе утро. С наступившим :)

    Проверил ваш код на трёх разных машинах, с включенными антивирусами, работает на ура.

    Как я уже писал выше, ковыряйте свой антивирус или фаерволы, что то имеет место быть на вашей рабочей станции.

     

    Добавлено: Удалось получить такую же ошибку как у вас, если запустить студию без прав администратора.

    Проблема решается если запустить студию с правами Администратора (правый клик по ярлычку студии -> "Запуск от имени Администратора" -> откываем проект -> Ура!!!)

    • Изменено Alexandr Gashper 1 января 2012 г. 8:23
    • Предложено в качестве ответа Abolmasov Dmitry 10 января 2012 г. 7:07
    • Помечено в качестве ответа Abolmasov Dmitry 13 января 2012 г. 8:01
    1 января 2012 г. 8:13

Все ответы

  • Добрый день.

    Если не сложно выложите архив с проектом целиком.

    Т.к. ваш код у меня например, без проблем работает.

    Может у вас антивирус какой или фаервол стоит?

    29 декабря 2011 г. 12:43
  • Доброе утро. Вот ссылка на архив.



    • Изменено hochuznat 30 декабря 2011 г. 5:44
    30 декабря 2011 г. 5:39
  • Доброе утро. С наступившим :)

    Проверил ваш код на трёх разных машинах, с включенными антивирусами, работает на ура.

    Как я уже писал выше, ковыряйте свой антивирус или фаерволы, что то имеет место быть на вашей рабочей станции.

     

    Добавлено: Удалось получить такую же ошибку как у вас, если запустить студию без прав администратора.

    Проблема решается если запустить студию с правами Администратора (правый клик по ярлычку студии -> "Запуск от имени Администратора" -> откываем проект -> Ура!!!)

    • Изменено Alexandr Gashper 1 января 2012 г. 8:23
    • Предложено в качестве ответа Abolmasov Dmitry 10 января 2012 г. 7:07
    • Помечено в качестве ответа Abolmasov Dmitry 13 января 2012 г. 8:01
    1 января 2012 г. 8:13
  • hochuznat, здравствуйте.

    Вы попробовали решение Alexandr Gashper, т.е. запустить Visual Studio с повышенными правами (от админимстратора)?

    Если это решает вашу проблему, то, пожалуйста, не забывайте отмечать ответ (кнопка Пометить как ответ).

    Спасибо.


    Для связи [mail]
    10 января 2012 г. 7:07