#.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.класс, который вы реализуете.
создайте приложение и запустите его.