Ошибка олицетворения при вызове wcf-сервиса - PullRequest
2 голосов
/ 13 июля 2011

Я разработал сервис wcf.Так как он также будет вызываться не -.net-клиентами, я использовал basichttpbinding.Некоторые методы требуют подражания.Это принудительно происходит путем украшения веб-методов с помощью:

 [OperationBehavior(Impersonation = ImpersonationOption.Required)]

После того, как я развернул службу на нашем тестовом сервере, я получаю странную ошибку при вызове службы:

Не удалосьзагрузить файл или сборку 'log4net, версия = 1.2.10.0, культура = нейтральная, PublicKeyToken = 1b44e1d426115821' или одна из ее зависимостей.Либо требуемый уровень олицетворения не был предоставлен, либо предоставленный уровень олицетворения недействителен.(Исключение из HRESULT: 0x80070542)

Я получаю эту ошибку независимо от способа вызова службы.Я получаю его, когда вызываю через wcfTestClient, и получаю его, когда вызываю через консольное приложение, которое написал.(Я добавил веб-сервис в качестве веб-ссылки на это приложение, чтобы имитировать поведение клиента, отличного от .net.)

Есть идеи?


PS: Вот файл web.config измой веб-сервис:

  <system.web>
    <compilation targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding closeTimeout="00:15:00" openTimeout="00:15:00" sendTimeout="00:15:00" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
        <defaultDocument>
            <files>
                <add value="CrmConnectorDiamondData.svc" />
            </files>
        </defaultDocument>
  </system.webServer>
</configuration>

Ответы [ 2 ]

3 голосов
/ 13 июля 2011

Ну, в WCF клиент должен явно разрешить олицетворение. В клиенте WCF это делается путем добавления поведения к клиентскому прокси либо через конфигурацию:

<behaviors>
  <endpointBehaviors>
    <behavior name="myBehavior">
      <clientCredentials>
        <windows allowedImpersonationLevel="Impersonation" />
      </clientCredentials>
    </behavior>
  </endpointBehaviors>
</behaviors>

или в коде:

proxy.ClientCredentials.Windows.AllowImpersonationLevel = TokenImpersonationLevel.Impersonation;

Я ожидаю, что это нужно настроить для WcfTestClient, поскольку уровень олицетворения по умолчанию допускает только идентификацию.

В случае прокси ASMX убедитесь, что вы передаете свои учетные данные .

Мое мнение таково, что проверка подлинности Windows не является хорошим выбором для служб, используемых клиентами, отличными от .NET (особенно если вы также имеете в виду не Windows).

0 голосов
/ 13 июля 2011

Похоже, что библиотека log4net несовместима с этим уровнем олицетворения. Если вы удалите ссылку, она будет работать.

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