WCF: Изменение ClientCredentials приводит к «Ручная адресация включена на этой фабрике, поэтому все отправленные сообщения должны быть предварительно адресованы». - PullRequest
2 голосов
/ 21 января 2011

может кто-нибудь помочь, я пытаюсь вызвать службу отдыха через фабрику каналов, но отправляю свои учетные данные ... Служба отдыха использует проверку подлинности Windows.

Но с помощью следующего кода я получаю "Ручная адресацияна этой фабрике включен, поэтому все отправленные сообщения должны быть предварительно адресованы. "ошибка при использовании GetMessage

Я знаю, что мой сервис работает так, как будто я удаляю аутентификацию Windows, он работает!Но с включенной аутентификацией Windows и без изменения clientCredentials я получаю ПЛОХОЙ ЗАПРОС, который я считаю нормальным ... поэтому мне нужно отправить свои учетные данные клиента

Я немного потерян.

   ChannelFactory<IService> cf = new ChannelFactory<IService>(new WebHttpBinding(), "http://localhost:8000");


  var defaultCredentials = cf.Endpoint.Behaviors.Find<ClientCredentials>();
  cf.Endpoint.Behaviors.Remove(defaultCredentials); 


  // step two - instantiate your credentials
  ClientCredentials loginCredentials = new ClientCredentials();
  loginCredentials.UserName.UserName = "Test";
  loginCredentials.UserName.Password = "test";


  // step three - set that as new endpoint behavior on factory
  cf.Endpoint.Behaviors.Add(loginCredentials); //add required ones


        IService channel = cf.CreateChannel();

        Console.WriteLine(channel.GetMessage("Dhananjay Get"));

        Console.WriteLine(channel.PostMessage("Dhananjay Post"));

Ответы [ 3 ]

3 голосов
/ 22 января 2011

Вам необходимо добавить поведение webHttp и подключить это поведение к конечной точке. Конечный результат будет выглядеть примерно так:

<system.serviceModel>
  <services>
    <service ...>
       <endpoint behaviorConfiguration="webHttpBehavior" ...>
       </endpoint>
    </service>
  </services>
  <behaviors>
    <endpointBehaviors>
    <behavior name="webHttpBehavior">
      <webHttp/>
    </behavior>
    </endpointBehaviors>
  </behaviors>
  ...
 </system.serviceModel>

Если это не поможет, пожалуйста, оставьте свой web.config.

1 голос
/ 07 августа 2012

Мне нужно было добавить <webHttp/> к поведению на стороне клиента.

1 голос
/ 11 сентября 2011

Хотя на этот вопрос найден приемлемый ответ, я решил добавить немного информации.

Из-за ошибки в GetQueryStringConverter класса WebServiceFactory (см. отчет Microsoft Connect) , вы не можете использовать <WebHttp/>, если вы передаете массив объектов через параметр. Вместо этого добавьте элемент <enableWebScript/> в привязку.

Client App.Config или Web.Config

<behaviors>
  <endpointBehaviors>
    <behavior name="WebHttp_Behaviour">
      <enableWebScript />
    </behavior>
  </endpointBehaviors>
</behaviors>

Сервис Web.Config

<behaviors>
  <serviceBehaviors>
    ...
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="WebHttp_EndPointBehaviour">
      <enableWebScript />
    </behavior>
  </endpointBehaviors>
</behaviors>

По крайней мере, мне пришлось добавить <enableWebScript\> как для клиента, так и для сервера.

...