Узел службы WCF не может найти какие-либо метаданные службы

#.net #wcf

#.net #wcf

Вопрос:

Я почти перенес службу в ASMX в vb на новую версию на основе WCF 4.0, но я не могу ее запустить, потому что при запуске получаю сообщение:

 WCF Service Host cannot find any service metadata. This may cause the client application to run improperly. Please check if metadate is enabled. Do you want to exit?
  

Я не знаю, что не так с этим app.config.

Не могли бы вы взглянуть на это и помочь мне?

 WCF Service Host cannot find any service metadata. This may cause the client application to run improperly. Please check if metadate is enabled. Do you want to exit?

<?xml version="1.0"?>
<configuration>
  <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="ExtraWS.My.MySettings" requirePermission="false" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    </sectionGroup>
  </configSections>
  <!-- When deploying the service library project, the content of the config file must be added to the host's 
  app.config file. System.Configuration does not support config files for libraries. -->
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ExtraWS.ExtraBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="ExtraWS.ExtraBehavior" name="ExtraWS.Service1">
        <endpoint address="" binding="basicHttpBinding" contract="ExtraWS.Service1" name ="mex">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding allowCookies="false" bypassProxyOnLocal="false" closeTimeout="00:01:00" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" name="PostcodeLookupSoap" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="32" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647" />
          <security mode="Transport">
            <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
            <message algorithmSuite="Default" clientCredentialType="UserName" />
          </security>
        </binding>
        <binding allowCookies="false" bypassProxyOnLocal="false" closeTimeout="00:01:00" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" name="C1WSSoap" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="32" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647" />
          <security mode="Transport">
            <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
            <message algorithmSuite="Default" clientCredentialType="UserName" />
          </security>
        </binding>
        <binding allowCookies="false" bypassProxyOnLocal="false" closeTimeout="00:01:00" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" name="E1Soap" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="32" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647" />
          <security mode="Transport">
            <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
            <message algorithmSuite="Default" clientCredentialType="UserName" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="https://postcodews.mycompany.co.uk/PostcodeLookup.asmx" binding="basicHttpBinding" bindingConfiguration="PostcodeLookupSoap" contract="PostcodeService.PostcodeLookupSoap" name="PostcodeLookupSoap" />
      <endpoint address="https://C1.mycompany.co.uk/C1ws.asmx" binding="basicHttpBinding" bindingConfiguration="C1WSSoap" contract="C1Service.C1WSSoap" name="C1WSSoap" />
      <endpoint address="https://E1uat.mycompany.co.uk/qbitE1.asmx" binding="basicHttpBinding" bindingConfiguration="E1Soap" contract="E1Service.E1Soap" name="E1Soap" />
    </client>
  </system.serviceModel>
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
    <compilation debug="true" />
    <authentication mode="Windows" />
    <httpHandlers>
      <remove path="*.asmx" verb="*" />
      <add path="*.asmx" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" verb="*" />
      <add path="*_AppService.axd" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" verb="*" />
      <add path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" verb="GET,HEAD" />
    </httpHandlers>
    <httpModules>
      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </httpModules>
    <membership defaultProvider="ClientAuthenticationMembershipProvider">
      <providers>
        <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
      </providers>
    </membership>
    <roleManager defaultProvider="ClientRoleProvider" enabled="true">
      <providers>
        <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
      </providers>
    </roleManager>
  </system.web>
  <applicationSettings>
    <ExtraWS.My.MySettings>
      <setting name="AlwaysAuthenticate" serializeAs="String">
        <value>False</value>
      </setting>
    </ExtraWS.My.MySettings>
  </applicationSettings>
  <appSettings>
    SECRET/>
    <add key="ClientSettingsProvider.ServiceUri" value="" />
  </appSettings>
  <connectionStrings>
    SECRET/>
  </connectionStrings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
  </startup>
</configuration>
  

Ответ №1:

Является ли ваша служба WCF библиотекой (DLL)? Я спрашиваю из-за следующей строки в опубликованном вами файле конфигурации:

<!-- When deploying the service library project, the content of the config file must be added to the host's
app.config file. System.Configuration does not support config files for libraries. -->

Если ваша служба является DLL, вам нужно будет опубликовать <system.serviceModel> раздел в файле конфигурации хоста. Для IIS это будет файл web.config; для службы Windows или автономной службы это будет файл app.config . Как сказано в приведенной выше строке, библиотеки служб не используют свои собственные файлы конфигурации, они используют файл конфигурации хоста.

Комментарии:

1. Большое внимание, Тим. На данный момент у меня нет доступа к коду, но в понедельник я это проверю. Спасибо 🙂

2. Проблема была с атрибутом DataContract или, на самом деле, с их отсутствием. Я понял это благодаря трассировке wcf.

3. @user278618: можете ли вы сказать, каково было решение, поскольку я сталкиваюсь с той же проблемой

4. Извините, я сейчас не помню, но я уверен, что у какого-то класса не было атрибута DataContract

5. Я сталкиваюсь с той же проблемой. Может кто-нибудь помочь с проблемой. Требуется точное решение.

Ответ №2:

Есть решение!

Эта проблема была связана с атрибутом имени службы. Не удалось найти IService в теге. Я изменил IService на другое имя. Необходимо сопоставить правильные имена.

Комментарии:

1. Столкнулся с аналогичной проблемой. Помните, что «Имя службы» будет учитываться регистр! Моя рабочая служба сломалась, когда пространство имен, в котором находился мой класс службы, изменилось на все прописные. Потратил пару часов на его отслеживание.

2. да, возникла та же проблема — заметил, что имя службы было с волнистой линией — переименование имени класса службы через обозреватель решений не переименовало его в файле App.Config…

Ответ №3:

В обозревателе решений щелкните правой кнопкой мыши на app.config 1. откроется диалоговое окно конфигурации. 2. Разверните службу. 3. Выберите конечную точку. 4. С правой стороны нажмите на контракт 5. откроется каталог приложений 6.откройте папку bin. дважды щелкните по dll, а затем выберите службу 7. нажмите на меню файл и сохраните его.

здесь hostissue — это namespace..so имя службы должно быть hostissue.класс, который вы реализуете.

создайте приложение и запустите его.