Не удалось добавить сервис. Метаданные службы могут быть недоступны. Убедитесь, что ваш сервис работает и предоставляет метаданные. - PullRequest
37 голосов
/ 05 марта 2011

EDIT:

После того, как я изменил web.config, и я не получаю ошибку, которая хороша .... тогда я добавляю новую страницу (html) и пишу этот небольшой код для использования сервиса следующим образом:

 $("#btn12").click(function (event) {
                $.getJSON('http://localhost:3576/MyService.svc/GetCurrentUser', {},
                function (data) {
                    alert(data);
                });
                //return false;
            });

Я вижу следующую ошибку в моем FireBug:

http://localhost:3576/MyService.svc/GetCurrentUser
400 Bad Request

Примечание: я добавил html-страницу в тот же проект wcf и сам запускаю проект, поэтому я предполагаю, что служба также работает ...

Что здесь может быть не так?

КОНЕЦ РЕДАКТИРОВАНИЯ

Я только что создал новые службы wcf, и когда я нажимаю f5 из VS, и я получаю эту ошибку в окне тестового клиента WCF:

Не удалось добавить сервис. Метаданные службы могут быть недоступны. Убедитесь, что ваш сервис работает и предоставляет метаданные.

Ошибка: невозможно получить метаданные из http://localhost:3696/MobileService.svc Если это служба Windows (R) Communication Foundation, к которой у вас есть доступ, убедитесь, что вы включили публикацию метаданных по указанному адресу. Для получения справки о включении публикации метаданных, пожалуйста, обратитесь к документации MSDN по http://go.microsoft.com/fwlink/?LinkId=65455.

Ошибка обмена WS-метаданными
URI: http://localhost:3696/MyService.svc
Метаданные содержат ссылку, которая не может быть разрешена: 'http://localhost:3696/MyService.svc'.

Конечная точка не прослушивала http://localhost:3696/MyService.svc, которая могла бы принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. Смотрите InnerException, если имеется, для более подробной информации.

Невозможно подключиться к удаленному серверу
Невозможно установить соединение, потому что целевая машина активно отказалась от него 127.0.0.1:3696
Ошибка HTTP GET
URI: http://localhost:3696/MyService.svc
Произошла ошибка при загрузке 'http://localhost:3696/MyService.svc'.
Невозможно подключиться к удаленному серверу
Невозможно установить соединение, поскольку целевая машина активно отказалась от него. 127.0.0.1:3696

Мой конфиг:

<behaviors>
    <endpointBehaviors>
        <behavior name="MyService.MyService">
            <webHttp/>
        </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
        <behavior name="metadataBehavior">
            <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:2812/MyService.svc" />
        </behavior>
    </serviceBehaviors>
</behaviors>
<services>
    <service name="MyService.MyService" 
             behaviorConfiguration="metadataBehavior">
        <endpoint 
            address="http://localhost/MyService.svc" 
            binding="customBinding"
            bindingConfiguration="jsonpBinding" 
            behaviorConfiguration="MyService.MyService"
            contract="MyService.IMyService"/>
    </service>
</services>
<bindings>
    <customBinding>
        <binding name="jsonpBinding">
            <jsonpMessageEncoding/>
            <httpTransport manualAddressing="true"/>
        </binding>
    </customBinding>
</bindings>
<extensions>
    <bindingElementExtensions>
        <add name="jsonpMessageEncoding" type="Microsoft.Ajax.Samples.JsonpBindingExtension, MyService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
    </bindingElementExtensions>
</extensions>

Ответы [ 13 ]

35 голосов
/ 05 марта 2011

Вам необходимо добавить конечную точку обмена метаданными (mex) к вашему сервису:

<services>
   <service name="MyService.MyService" behaviorConfiguration="metadataBehavior">
      <endpoint 
          address="http://localhost/MyService.svc" 
          binding="customBinding" bindingConfiguration="jsonpBinding" 
          behaviorConfiguration="MyService.MyService"
          contract="MyService.IMyService"/>
      <endpoint 
          address="mex" 
          binding="mexHttpBinding" 
          contract="IMetadataExchange"/>
   </service>
</services>

Теперь вы сможете получить метаданные для своего сервиса

Обновление: хорошо, так что вы просто запускаете это из Visual Studio - в этом случае оно будет размещено на Cassini, встроенном веб-сервере.Однако этот зверь только поддерживает HTTP - вы не используете этот протокол в своей привязке ...

Кроме того, поскольку вы размещаете его в Cassini, адрес вашей службы будетпродиктованный Кассини - вы ничего не можете определить.

Таким образом, мое предложение было бы:

  • попытаться использовать http-привязку (только сейчас для тестирования)
  • заставить это работать
  • , как только вызнайте, что это работает, измените его на свою пользовательскую привязку и разместите его в IIS

Так что я бы изменил конфигурацию на:

<behaviors>
   <serviceBehaviors>
      <behavior name="metadataBehavior">
         <serviceMetadata httpGetEnabled="true" />
      </behavior>
   </serviceBehaviors>
</behaviors>
<services>
   <service name="MyService.MyService" behaviorConfiguration="metadataBehavior">
      <endpoint 
          address=""   <!-- don't put anything here - Cassini will determine address -->
          binding="basicHttpBinding" 
          contract="MyService.IMyService"/>
      <endpoint 
          address="mex" 
          binding="mexHttpBinding" 
          contract="IMetadataExchange"/>
   </service>
</services>

Как только вы это сделаете, попробуйте сделатьView in Browser в вашем SVC-файле в решении Visual Studio - если это не сработает, у вас все еще есть какая-то серьезная проблема.

Если это работает - теперь вы можете нажать F5 в VS, и ваш сервис должен появиться, и с помощью приложения WCF Test Client вы сможете получить метаданные вашего сервиса из a)адрес, на котором Кассини начал вашу службу, или б) мекс-адрес (адрес Кассини + /mex)

15 голосов
/ 26 октября 2013

Если вы переименуете файл SVC, убедитесь, что ваша разметка верна. Вам не нужно изменять конфигурацию по умолчанию и выполните следующие шаги 1) Перейдите в файл SVC правой кнопкой мыши и выберите вид разметки. 2) Убедитесь, что этот код и служба указывают на правильное имя файла и класса.

6 голосов
/ 17 февраля 2014

FYI - ВЫ МОЖЕТЕ также получить эту ошибку от машины, которой не хватает свободной памяти. Я получил эту ошибку на машине, на которой я работаю с 16 гигабайтами памяти.У меня была виртуальная машина с 6 гигабайтами и много приложений, интенсивно использующих память.Закройте некоторые из них, и эта проблема исчезла.

Я все еще получил ошибку в заголовке вопроса

Не удалось добавить службу.Метаданные службы могут быть недоступны.Убедитесь, что ваш сервис работает и предоставляет метаданные.

Я заметил более крупное сообщение о памяти, хотя и использовал тестовый клиент WCF.

Надеюсь, это поможет кому-то еще.

3 голосов
/ 12 августа 2017

В моем случае я получал эту ошибку, потому что опция (HttpActivation) не была включена. Windows features dialog box showing HTTP Activation under WCF Services under .NET Framework 4.6 Advanced Services

3 голосов
/ 07 сентября 2012

Добавьте Serializable() перед типом, который вы выставляете

Serializable()
Public Class YourType

Поместите Serializable в <>

2 голосов
/ 28 февраля 2013

Изменение типа привязки с привязки wsHttp к привязке basichttp в теге конечной точки и с привязки wsHttpbinding к привязке mexhttpbing в теге конечной точки метаданных помогло устранить ошибку. Спасибо ...

2 голосов
/ 12 июля 2011

при работе со службой WCF .NET 4.0 - убедитесь, что Global.asax отсутствует в исходном каталоге.Если это так, он берется во время выполнения и пытается быть скомпилирован в ...

1 голос
/ 20 апреля 2016

В моем случае при комментировании

<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 

в файле web.config выдавалось сообщение «Не удалось добавить службу. Метаданные службы могут быть недоступны. Убедитесь, что служба запущена и предоставляетметаданные».

0 голосов
/ 29 ноября 2018

Свойство IsOneWay=true может быть истинным в операционном контракте интерфейса.Удалите это свойство, чтобы избавиться от этой ошибки.

0 голосов
/ 17 декабря 2015

В большинстве случаев это происходит из-за меньшего объема памяти.сначала проверьте, затем попробуйте другие трюки.

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