Метаданные WCF недоступны при просмотре напрямую - PullRequest
3 голосов
/ 01 декабря 2011

Когда я перехожу к .svc, я постоянно получаю сообщение об ошибке: публикация метаданных для этой службы в настоящее время отключена.

Я выполнил все инструкции, перечисленные на странице ошибки (добавил поведение, ссылаясь наПоведение, добавил конечную точку mex, пробовал как с базовым адресом, так и без него) вместе с инструкциями на MSDN: http://msdn.microsoft.com/en-us/library/ms734765.aspx (почти то же самое, но включает версию политики).Я даже выпотрошил свой конфигурационный файл и только оставил этот материал - это просто не имеет никакого значения.Я подтвердил, что файл конфигурации используется (то есть, в нем есть ошибка, и ошибка меняется).

Раздел выглядит так:

<system.serviceModel>
  <services>
    <service name="HoldingService" behaviorConfiguration="SimpleServiceBehavior">
      <host>
        <baseAddresses>
          <add baseAddress="http://localhost/xxxx.cdf.holding/HoldingService.svc"/>
        </baseAddresses>
      </host>
      <endpoint address=""
                binding="basicHttpBinding"
                contract="Xxx.Xxxx.Schema.Service.Cdf.Holding.IHoldingService" />
      <endpoint address="mex"
                binding="mexHttpBinding"
                contract="IMetadataExchange" />
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="SimpleServiceBehavior">
        <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

Есть ли вообще какой-либо способисправить или отладить это?

Ответы [ 2 ]

3 голосов
/ 02 декабря 2011

Мне удалось решить эту проблему.Проблема была name="HoldingService".Несмотря на то, что файл .svc находится в том же проекте, что и файл .config, он должен быть полностью квалифицирован (т.е. name="Xxx.Xxxx.Web.Cdf.Holding.HoldingService").

Окончательный код выглядит следующим образом и работает отлично:

<system.serviceModel>
  <services>
    <service name="Xxx.Xxxx.Web.Cdf.Holding.HoldingService" behaviorConfiguration="SimpleServiceBehavior">
      <endpoint address=""
                binding="basicHttpBinding"
                contract="Xxx.Xxxx.Schema.Service.Cdf.Holding.IHoldingService" />
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="SimpleServiceBehavior">
        <serviceMetadata httpGetEnabled="True" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

Кроме того, я решил проблему с помощью «Редактора конфигурации служб Microsoft» (доступен через Tools> WCF Service Configuration Editor в VS2010).Я не знал, что это существовало, и вырезал вручную конфигурацию.

Спасибо Майклу за ваши предложения - они много убрали код.

1 голос
/ 01 декабря 2011

Может быть глупо, но попробуйте убрать версию политики из вашего поведения serviceMetadata. Я никогда не видел в этом необходимости. Вы также можете удалить конечную точку mex и просто перейти к ...

http://localhost/xxxx.cdf.holding/HoldingService.svc

Конечная точка mex предназначена для обмена метаданными по именованным каналам и тому подобного. Если у вас есть конечная точка http, это должно быть сделано.

Кроме того, поскольку вы размещаете в IIS, похоже, что базовый адрес, вероятно, не используется. Просто удалите этот раздел и перейдите туда, где у вас есть файл SVC в IIS.

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