Почему моя локальная служба WCF не разрешает метаданные, когда я настроил их для mex? - PullRequest
1 голос
/ 05 мая 2011

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

Окружающая среда

Моя машина для разработки имеет Windows Server 2003, SP2 с IIS. Я создал свой сервис локально, а затем настроил каталог CSPROJ как веб-сайт.

Конфигурация IIS

Web Site    Description MyService
    IP Address  (All Unassigned)
    TCP port    5001
    Enable HTTP Keep-Alives true
HomeDirectory   Directory located on this computer  
    Local Path  Project directory with .svc and Web.config
    Application Name    Default Application
    Execute Permissions Scripts and Executables
    Application Pool    Default
ASP.NET Version 2.0.50727
    Virtual Path    MyService
    File location   Path of Web.config

Я смоделировал свои настройки IIS для экземпляра UAT, из которого я могу получить информацию о прокси. Однако, когда я пытаюсь получить информацию о прокси в моем экземпляре с

C:\Program Files\Microsoft Visual Studio 10.0\VC>svcutil http://localhost:5001/P
mdgService.svc

Я получаю следующие сообщения об ошибках.

Ошибка: невозможно получить метаданные из http://localhost:5001/MyService.svc ...

Метаданные содержат ссылку, которая не может быть разрешена: «http://localhost:5001/MyService.svc'.

Не было прослушивания конечной точки в http://localhost:5001/MyService.svc ... Удаленный сервер возвратил ошибку: (404) Not Found. ...

Я не могу перейти к URL.

Я попробовал предложения

  1. Проверено, что поведение метаданных используется. (Это идентично рабочим экземплярам.)
  2. Разрешение полного доступа к C: \ Windows \ temp к IWAM_, IUSER_, ASPNET (предлагается здесь: Ссылка на метаданные WCF не может быть разрешена ) не помогло.

Вот посмотрите на мой Web.config

<configuration>
<!-...-->
<system.serviceModel>
    <services>
      <service behaviorConfiguration="MyService.Service1Behavior" name="MyService.MyService">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="MyBasicHttpBinding"
  contract="MyService.MyService">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="MyBasicHttpBinding" maxBufferPoolSize="2147483647"  maxReceivedMessageSize="2147483647"
            maxBufferSize="2147483647">
        <readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="2147483647"
            maxNameTableCharCount="2147483647" maxStringContentLength="2147483647" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyService.Service1Behavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Ответы [ 2 ]

1 голос
/ 05 мая 2011

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

На основе вашего метода хоста будет разрешен базовый адрес.

Если вы используете IIS для его размещения, путь, который вы указали, должен дать вам подсказку.

Из вашего заявления я могу понять, что вы пытаетесь использовать подобную конфигурацию в качестве другого работающего сервиса.В этом случае номер вашего порта может не совпадать (http://localhost:5000).

Попробуйте создать файл .svc и используйте опцию Visual Studio «Просмотр в браузере». Это должно дать вам представление о назначении номера порта..

0 голосов
/ 07 мая 2011

Проблема была в разрешениях.

Текущий идентификатор (NT AUTHORITY \ NETWORK SERVICE) не имеет доступа для записи в 'c: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727\ Временные файлы ASP.NET '.

После того, как я предоставил эти разрешения NETWORK SERVICE на машине, я смог создать прокси и настроить эту службу в моем клиенте Silverlight.

Я хотел бы поблагодарить Разлебе за то, что он указал мне правильное направление.

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