WCF, ошибка 405 в Windows 2016, но не в 2008 - PullRequest
0 голосов
/ 01 октября 2019

Служба WCF, работающая в ASP.NET 4.52, клиент Silverlight. Приложение раньше работало при размещении на Windows 2008 R2. Теперь я настроил его на сервере Windows 2016, и самые первые ошибки вызова службы с ошибкой 405 - метод не разрешен. Метод здесь POST. Описание ошибки:

405 - HTTP-глагол, используемый для доступа к этой странице, не разрешен.

В экземпляре на основе Windows 2008 это также POST, но обратная сторонаКонец не имеет проблем с этим. Служба использует HTTPS с аутентификацией Windows.

Соответствующие биты Web.config:

    <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="winAuthBasicHttpBinding" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647">
          <readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647"/>
          <security mode="Transport">
            <transport clientCredentialType="Ntlm"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Foo.Web.Services.FooBehavior">
          <serviceMetadata httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="Foo.Web.Services.FooBehavior" name="Foo.Web.Services.FooService">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="winAuthBasicHttpBinding" contract="Foo.Web.Services.IFooService">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
      </service>
    </services>
    </system.serviceModel>

Метод ошибки не имеет аннотаций, отличных от [OperationContract]. Интерфейс имеет только [ServiceContract]. Класс обслуживания имеет:

    [WcfErrorBehavior]
    [WcfSilverlightFaultBehavior]    
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

Может показаться уместным, что метод не имеет аргументов;Я считаю, что более свежие версии WCF используют GET для них. Приложение довольно старое.

Ошибка воспроизводится с помощью стандартного HTTP-клиента, это не относится к интерфейсу Silverlight.

Похоже на разницу в конфигурации WCF на уровне машины между .NETверсии. Менее вероятно, что на коробке Windows 2016 отсутствует компонент Windows.

РЕДАКТИРОВАТЬ: включил трассировку запросов, получил что-то обратно. Уведомление EXECUTE_REQUEST_HANDLER отправлено на StaticFileModule. Служба WCF определенно не является статическим файлом.

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

В любом случае, я хочу ответить на эту тему. это может быть полезно для тех, кто сталкивался с подобной проблемой.
@Seva Алексеев, как вы упомянули, для размещения службы WCF, созданной Webhttpbinding в IIS, и некоторых других протоколов, таких как Nettcpbinding, мы должны включить некоторые виды функций Windows. enter image description here
Для NetTcpbinding нам также необходимо включить нижеуказанную функцию Windows.
enter image description here
Не стесняйтесь, дайте мне знать, если есть что-тоЯ могу помочь с.

0 голосов
/ 01 октября 2019

В Диспетчере серверов, ролях и функциях «Активация HTTP» отсутствовала в категории WCF. Моя вторая догадка была верной. Тем не менее, ошибка несколько вводит в заблуждение, поэтому я оставлю этот вопрос здесь ради потомков.

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