Как добавить поддержку метаданных, если включен enableWebScript? - PullRequest
1 голос
/ 08 января 2011

Я пытаюсь создать службу wcf, размещенную на ASP.NET (я делал это некоторое время назад, но сейчас не могу ...)

На этом шаге я хочу добавить поддержку метаданных. Однажды я добавил следующую конечную точку в конфигурацию:

<endpoint address="mex" behaviorConfiguration="McActivationApp.EnrollmentServiceAspNetAjaxBehavior"
 binding="mexHttpBinding" contract="IMetadataExchange" />

У меня следующая ошибка:

Конечная точка в «http://MyPcName/MCActivation/EnrollmentService.svc/mex' не имеет привязки ни с кем MessageVersion. 'System.ServiceModel.Description.WebScriptEnablingBehavior' предназначен только для использования с WebHttpBinding или аналогичные привязки.

Я пытался изменить контракт IMetadataExchange на ''. Это вызывает еще одну ошибку:

Конечная точка в «http://MyPcName/MCActivation/EnrollmentService.svc/mex' не имеет привязки ни с кем MessageVersion. 'System.ServiceModel.Description.WebScriptEnablingBehavior' предназначен только для использования с WebHttpBinding или аналогичные привязки.

Посоветуйте, пожалуйста, как правильно добавить поддержку метаданных?


Вот полный раздел system.serviceModel.

<system.serviceModel>
 <behaviors>
   <endpointBehaviors>
    <behavior name="McActivationApp.EnrollmentServiceAspNetAjaxBehavior">
     <enableWebScript />
    </behavior>
   </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="McActivationApp.EnrollmentServiceAspNetAjaxBehavior">
        <serviceMetadata httpGetEnabled="True"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
  <services>
   <service behaviorConfiguration="McActivationApp.EnrollmentServiceAspNetAjaxBehavior"
    name="McActivationApp.EnrollmentService">
    <endpoint address="" behaviorConfiguration="McActivationApp.EnrollmentServiceAspNetAjaxBehavior"
     binding="webHttpBinding" contract="McActivationApp.EnrollmentService" />
    <endpoint address="mex" behaviorConfiguration="McActivationApp.EnrollmentServiceAspNetAjaxBehavior"
     binding="mexHttpBinding" contract="McActivationApp.EnrollmentService" />
   </service>
  </services>
 </system.serviceModel>
</configuration>

Ответы [ 2 ]

2 голосов
/ 08 января 2011

Что произойдет, если вы удалите behaviorConfiguration="McActivationApp.EnrollmentServiceAspNetAjaxBehavior" из служебного тега.Я также попытался бы дать поведенческим именам уникальные имена, которые могут привести к некоторой путанице.

1 голос
/ 10 января 2011

Что я сделал для решения проблемы: Создайте новый проект WcfServiceLibrary и проанализируйте его конфигурацию приложения.

На основании этого я сделал следующее:

<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior name="McActivationApp.EnrollmentServicBehavior">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<services>
  <service name="McActivationApp.EnrollmentService" behaviorConfiguration="McActivationApp.EnrollmentServicBehavior">
    <endpoint address="" binding="webHttpBinding" contract="McActivationApp.EnrollmentService"/>
    <endpoint address="mex" binding="mexHttpBinding" contract="McActivationApp.EnrollmentService" />
  </service>
</services>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>

ОСНОВНАЯ разница заключается в том, что яВы переместили спецификацию конфигурации поведения из конечных точек службы в саму службу.

Также я удалил поведение «конечных точек» и использовал единственную конечную точку «службы»

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