Подтвердить что ты не робот

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

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 и запускаю проект самостоятельно, поэтому я предполагаю, что служба также запущена...

Что здесь может быть неправильным?

END EDIT

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

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

Ошибка: невозможно получить метаданные из 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>
4b9b3361

Ответ 1

Вам нужно добавить конечную точку обмена метаданных (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>

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

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

Кроме того, поскольку вы размещаете это в Cassini, адрес вашей службы будет продиктован 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 app вы должны иметь возможность получать метаданные службы из: a) адреса, на котором Cassini запускает вашу службу, или b) адрес mex (адрес Cassini + /mex)

Ответ 2

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

Ответ 3

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

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

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

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

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

Ответ 4

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

Serializable()
Public Class YourType

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

Ответ 5

В моем случае я получал эту ошибку, потому что опция (HttpActivation) не была включена. Диалоговое окно функций Windows, показывающее активацию HTTP в службах WCF в .NET Framework 4.6 Advanced Services

Ответ 6

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

Ответ 7

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

Ответ 8

В моем случае, комментируя

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

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

Ответ 9

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

Ответ 10

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

Ответ 11

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

Ответ 12

В моем случае Webservice генерировал сборку с именем, отличным от имени проекта/службы. Он был задан так моим разработчиком-предшественником, который работал над решением, и я не знал.

Было установлено -

  <serviceBehaviors>
    <behavior name="CustomServiceBehavior">
      <serviceAuthorization serviceAuthorizationManagerType="BookingService.KeyAuthorizationManager, BookingService" />
     </behavior>
 </serviceBehaviors>

Итак, исправлением было правильное имя сборки в serviceAuthorizationManagerType. Название сборки можно получить по следующему пути сервисного проекта: Щелкните правой кнопкой мыши на WCF svc project--> Выберите "Свойства" → В списке вкладок выберите "Приложение". Сравните значение с полем "Имя сборки:" в списке. Это AssemblyName, которое нужно использовать для serviceAuthorizationManagerType, который не обязательно должен быть именем servicename.

  <serviceBehaviors>
    <behavior name="MyCustomServiceBehavior">
      <serviceAuthorization serviceAuthorizationManagerType="BookingService.KeyAuthorizationManager, AssemblyNameFromSvcProperties" />
     </behavior>
 </serviceBehaviors>

не забудьте следовать инструкции для serviceAuthorizationManagerType, как указано на https://docs.microsoft.com/en-us/dotnet/framework/wcf/extending/how-to-create-a-custom-authorization-manager-for-a-service

Это говорит -

Предупреждение

Обратите внимание, что при указании serviceAuthorizationManagerType строка должна содержать полное имя типа. запятая и имя сборки, в которой определен тип. Если вы не укажете имя сборки, WCF попытается загрузить тип из System.ServiceModel.dll.

Ответ 13

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

Пример:

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

чтобы...

[ServiceContract()]
 public interface IStringReverser
 {
   [OperationContract]
   string ReverseString(string value);
 }

Ответ 14

После добавления этого в файл 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;

Надеюсь, это поможет вам.