Ошибка публикации метаданных веб-службы WCF отключена - PullRequest
0 голосов
/ 04 августа 2010

Я изменил свой web.config, добавив пользовательскую привязку, чтобы увеличить буфер и размер сообщения, и похоже, что при создании элемента службы явно он каким-то образом нарушил ссылку на мой элемент поведения.

Когда я пытаюсь запустить свой веб-сервис из VS с помощью тестового клиента WCF или перехожу на страницу сервиса, я получаю сообщение об ошибке:

Metadata publishing for this service is currently disabled.

Я сравнил свой web.config с несколькими различными источниками по этому вопросу, и все, кажется, совпадает. Я понятия не имею, в чем проблема.

Вот элемент System.serviceModel:

<system.serviceModel>    
<services>
  <service name="BIMIntegrationWS.BIMIntegrationService" behaviorConfiguration="metadataBehavior">
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <endpoint address="http://localhost:1895/BIMIntegrationService.svc" 
              binding="customBinding" bindingConfiguration="customBinding0" 
              contract="BIMIntegrationWS.IBIMIntegrationService"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="metadataBehavior">
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <customBinding>
    <binding name="customBinding0">
      <binaryMessageEncoding />
      <httpTransport maxReceivedMessageSize="262064"
                   maxBufferSize="262064"
                   maxBufferPoolSize="262064" />
    </binding>
  </customBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"  aspNetCompatibilityEnabled="true"/>

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

Любая помощь будет принята с благодарностью.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 05 августа 2010

Я думаю, что "исправил" проблему.Больше будет позже.

РЕДАКТИРОВАТЬ: чтобы «исправить» мою проблему, я в основном добавил новую службу WCF в свое приложение, и, если бы она реализовала мой предыдущий интерфейс, я скопировал весь код из моей исходной службы и, когда я настроилфайл .config (чтобы он выглядел почти так же, как и в вопросе), все работало нормально

Конечно, я знаю, как мы все знаем, что здесь нет магии, что должно быть некоторое расхождение.Именно тогда я заметил / вспомнил, что после того, как я создал свой оригинальный сервис, названный «BIMIntegrationService.svc», я решил, что это слишком длинное имя, поэтому я переименовал / реорганизовал свой класс в «BIMIntegrationWS».Однако это не меняет имя служебного файла (и, следовательно, имя файла в адресе http: //).

Короче говоря, я сделал 2 изменения в своем .config, и все заработало:

1) Я изменил:

<service name="BIMIntegrationWS.BIMIntegrationService" behaviorConfiguration="metadataBehavior">

на

<service name="BIMIntegrationWS.BIMIntegrationWS" behaviorConfiguration="metadataBehavior">

После запуска службы, подобной этой, я получил ошибку (на этот раз полезную) с жалобой на то, что если было включено несколько привязок сайтов, адрес конечной точки должен быть относительным.Итак:

2) Я установил это в false (потому что я не помню, почему это было там в первую очередь), и все работало нормально.

Я думаю, я должен был взятьПодсказка, когда казалось, что мой веб-сервис вообще не использует мой элемент "сервис".: \

РЕДАКТИРОВАТЬ 2:

На самом деле вы можете видеть во втором комментарии в исходном вопросе, что автоматически сгенерированный тег указывает на:, а не на BIMIntegrationService.Это должно было дать его.

Я сомневаюсь, что у многих других людей будет такая же проблема, но на всякий случай.

0 голосов
/ 05 августа 2010

У меня была такая же проблема; Я настроил все правильно (даже скопировал код из предыдущего запущенного мной сервиса), но пока не внес изменений, разрешив сервису предоставлять метаданные. тем не менее, если я делаю орфографическую ошибку, ошибку синтаксического анализа и т. д. в app.config, я получаю исключения, говорящие мне, чтобы исправить проблему (которая говорит мне, что служба читает конфигурацию, просто игнорируя ее.

Мне удалось обойти это, сгенерировав параметры конфигурации в главном приложении:

System.ServiceModel.Description.ServiceMetadataBehavior smb = new System.ServiceModel.Description.ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
ServiceBase host = new Servicebase(typeof(MyService), new Uri("http://localhost:1234/"));
host.Description.Behaviors.Add(smb);
host.Open();

...

host.Close();

По сути, позволяют коду переопределять и выдвигать изменения файла конфигурации, которые я хотел применить. Я знаю, что это не идеально, но я выставлял сервис через службу Windows, которая сделала это выполнимым. если вы решите свою проблему, пожалуйста, передайте решение, хотя мне было бы любопытно узнать, почему (по крайней мере, в вашем, если не в обоих наших случаях) оно дает сбой.

...