Ошибка вызова службы WCF - PullRequest
       12

Ошибка вызова службы WCF

2 голосов
/ 14 сентября 2011

Служба WCF размещена на IIS 5.1 с отключенным анонимным доступом.Ниже приведена часть файла web.config, показывающая, как настроена служба:

<system.serviceModel>
   <bindings>
      <basicHttpBinding>
         <binding name="basicHttpBindingCfg">
            <security mode="TransportCredentialOnly">
               <transport clientCredentialType="Windows" />
            </security>
         </binding>
      </basicHttpBinding>
   </bindings>
   <services>
      <service behaviorConfiguration="ServiceBehavior" name="HelloService">
         <endpoint name="BasicHttpEndpoint" 
             address="" 
             binding="basicHttpBinding" 
             bindingConfiguration="basicHttpBindingCfg"
             contract="IHelloService">
         </endpoint>
         <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
   </services>
   <behaviors>
      <serviceBehaviors>
         <behavior name="ServiceBehavior">
            <serviceMetadata httpGetEnabled="true"/>
            <serviceDebug includeExceptionDetailInFaults="false"/>
          </behavior>
      </serviceBehaviors>
   </behaviors>
</system.serviceModel>

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

Либо требуемый уровень олицетворения не был предоставлен, либо указанный уровень олицетворения недействителен.

Обратите внимание, что тип привязки и среда размещения предварительно определены клиентом и не могутбудут изменены.

Любая помощь, которая может привести к решению этой проблемы, будет принята с благодарностью.

Спасибо!

Zen

РЕДАКТИРОВАТЬ: Вот как настроен клиент:

<system.serviceModel>
   <bindings>
      <basicHttpBinding>
         <binding name="BasicHttpEndpoint" closeTimeout="00:01:00" openTimeout="00:01:00"
                receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
                bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
            <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                          maxBytesPerRead="4096" maxNameTableCharCount="16384" />
            <security mode="TransportCredentialOnly">
               <transport clientCredentialType="Windows" proxyCredentialType="None"
                        realm="" />
               <message clientCredentialType="UserName" algorithmSuite="Default" />
            </security>
         </binding>
      </basicHttpBinding>
   </bindings>
   <client>
      <endpoint name="BasicHttpEndpoint" 
          address="http://vm00000033871b.intra.pri/WCFServiceBasicHttp/HelloService.svc"
          binding="basicHttpBinding" 
          bindingConfiguration="BasicHttpEndpoint"
          contract="Proxy.IHelloService" />
   </client>
</system.serviceModel>

1 Ответ

3 голосов
/ 14 сентября 2011

Попробуйте передать текущим пользователям учетные данные Windows:

Using proxy As New PRX.HelloServiceClient()
    proxy.ClientCredentials.Windows.AllowedImpersonationLevel = 
                                       TokenImpersonationLevel.Impersonation
    proxy.ChannelFactory.Credentials.Windows.ClientCredential = 
                                       CredentialCache.DefaultNetworkCredentials
    Dim message As String = proxy.Hello("Hi")
    MessageBox.Show(message)
End Using
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...