Самостоятельная служба WCF не может быть протестирована с помощью WCFTestClient - PullRequest
3 голосов
/ 25 августа 2011

Я пытаюсь протестировать свой собственный wcf-сервис, используя WCFTestClient.Я получаю сообщение об ошибке, подобное следующему:

Ошибка: невозможно получить метаданные из http://localhost:2303/MyService Если это служба Windows (R) Communication Foundation, к которой у вас есть доступ, убедитесь, что у вас естьвключена публикация метаданных по указанному адресу.Для получения справки о включении публикации метаданных см. Документацию MSDN по адресу http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata URI ошибки Exchange: http://localhost:2303/MyService Метаданные содержат ссылку, которую невозможно разрешить: 'http://localhost:2303/MyService'. Тип содержимого application / soap + xml;charset = utf-8 не поддерживается службой http://localhost:2303/MyService. Привязки клиента и службы могут не совпадать.Удаленный сервер возвратил ошибку: (415) Невозможно обработать сообщение, потому что тип содержимого 'application / soap + xml;charset = utf-8 'не был ожидаемым типом' text / xml;charset = utf-8 '.. HTTP URI ошибки GET: http://localhost:2303/MyService Произошла ошибка при загрузке' http://localhost:2303/MyService'. Запрос не выполнен с состоянием HTTP 400: неверный запрос.

Мой проектструктура выглядит следующим образом:

  1. Консольное приложение, которое выступает в качестве хоста
  2. Сервисный контракт
  3. Реализация сервиса

Вот моя реализация сервиса иКлассы контрактов, которые находятся в двух отдельных проектах.

namespace MyService
{
    public class MyService : IMyService
    {
        public string GetGreeting(string name)
        {
            return "Hello " + name;
        }

        public string GetYelling(string name)
        {
            return "What the hell " + name + "!!";
        }
    }
}

namespace MyService
{
    [ServiceContract]
    public interface IMyService
    {
        [OperationContract]
        string GetGreeting(string name);

        [OperationContract]
        string GetYelling(string name);
    }
}

Это консольное приложение

namespace MyWCFHost
{
    class Program
    {
        static void Main(string[] args)
        {

            ServiceHost serviceHost = new ServiceHost(typeof(MyService.MyService), new Uri("http://localhost:2303"));
            serviceHost.Open();

            Console.WriteLine("MyService is running...");
            Console.ReadKey();
            serviceHost.Close();
        }
    }
}

Это файл конфигурации

<configuration>

  <system.serviceModel>
    <services>
      <service name ="MyService.MyService" behaviorConfiguration="MyService.MyServiceBehavior">
        <endpoint address="http://localhost:2303/MyService" binding="basicHttpBinding" contract="MyService.IMyService"/>
        <endpoint address="mex" binding="mexHttpBinding" name="mexpoint" contract="IMetadataExchange" />
      </service>

    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="MyService.MyServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

  </system.serviceModel>


</configuration>

Что яне так?

Спасибо за ваше время ...

Редактировать

Служба работает, когда я пытаюсь запустить ее через клиент winforms, поэтому язнаю, что сервис работает.Вопрос в том, как мне подготовить его к тестированию, используя WcfTestClient.

Ответы [ 3 ]

3 голосов
/ 26 августа 2011

Я подозреваю, что у вас проблема с конечной точкой MEX.В настоящее время вы указываете только относительный адрес ("mex") - но в вашем сервисе не определен базовый адрес для HTTP ......

Я бы предложил:

  • либо определите базовый адрес, а затем используйте только относительные адреса «сверху» этого - для своей обычной и конечной точки MEX

ИЛИ:

  • определите свои адресакак полные, полные адреса - не только для ваших обычных конечных точек, но и в этом случае для конечной точки MEX.

Так что измените вашу конфигурацию на что-то вроде:

<service name ="MyService.MyService" behaviorConfiguration="MyService.MyServiceBehavior">
    <endpoint 
        address="http://localhost:2303/MyService" 
        binding="basicHttpBinding" 
        contract="MyService.IMyService"/>
    <endpoint name="mexpoint" 
        address="http://localhost:2303/MyService/mex" 
        binding="mexHttpBinding" 
        contract="IMetadataExchange" />
  </service>

и тогда я надеюсь, что вы сможете получить доступ к своим метаданным и таким образом подключиться к своему сервису!

1 голос
/ 25 августа 2011

Вы используете Windows 7?

Попробуйте запустить:

netsh http add urlacl url=http://+:2303/MyService user=DOMAIN\user

Подробнее info и здесь тоже

0 голосов
/ 26 августа 2011

Попробуйте запустить вашу визуальную студию в качестве администратора. Тогда вам не нужно вручную запускать такие команды, как (url = http://+:2303/MyService user = PCNAME \ mylogin)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...