Не удалось добавить сервис. Метаданные службы могут быть недоступны. Убедитесь, что ваш сервис работает и предоставляет метаданные. - 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 ]

0 голосов
/ 13 мая 2015

Я пробовал несколько решений, упомянутых через Интернет, к сожалению, безуспешно. В моем проекте у меня есть два интерфейса (xml / json) для каждого сервиса. Добавление конечных точек mex или конфигураций привязки не помогло вообще. Но, как я заметил, я получаю эту ошибку только при запуске проекта с фокусом на файл * .svc.cs или * .config. Когда я запускаю проект с ориентированным файлом IService.cs (где определены интерфейсы), сервис добавляется без каких-либо ошибок. Это действительно странно и, на мой взгляд, вывод - ошибка в Visual Studio 2013. Я воспроизвел такое же поведение на нескольких машинах (даже на Windows Server). Надеюсь, это кому-нибудь поможет.

0 голосов
/ 14 мая 2013

После Добавьте это в свой файл web.config и настройте в соответствии с названием вашей службы и названием контракта.

<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>

Пожалуйста, добавьте это в свой Service.svc

using System.ServiceModel.Description;

Надеждаэто поможет вам.

0 голосов
/ 29 января 2013

Я заметил, что когда я удалил SessionMode из атрибута ServiceContract, проблема исчезла.

Пример:

[ServiceContract(SessionMode=SessionMode.Required, CallbackContract=typeof(ICallbacks))]
 public interface IStringReverser
 {
   [OperationContract]
   string ReverseString(string value);
 }

to ...

[ServiceContract()]
 public interface IStringReverser
 {
   [OperationContract]
   string ReverseString(string value);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...