Подтвердить что ты не робот

Ошибка WCF: ручная адресация включена в этом factory, поэтому все отправленные сообщения должны быть предварительно адресованы

У меня есть размещенная служба WCF, для которой я создал пользовательский factory, так что это будет работать с несколькими заголовками хостов:

/// <summary>
/// Required for hosting where multiple host headers are present
/// </summary>
public class MultipleHostServiceFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        List<Uri> addresses = new List<Uri>();
        addresses.Add(baseAddresses[0]);
        return base.CreateServiceHost(serviceType, addresses.ToArray());
    }
}

Я уверен, что мои конфигурационные файлы теперь правы, как на клиенте, так и на сервере (можно увидеть здесь).

Ошибка, которую я получаю, по-видимому, связана с factory:

Ручная адресация включена в этом factory, поэтому все отправленные сообщения должны быть предварительно адресованы.

public string GetData(int value) {
    return base.Channel.GetData(value);
}

Ошибка происходит в строке return base.Channel.GetData(value);.

4b9b3361

Ответ 1

Я испытал эту ошибку, и проблема была решена путем добавления WebHttpBehavior (строка 2 ниже):

var factory = new ChannelFactory<IService>(new WebHttpBinding(), uri);
factory.Endpoint.Behaviors.Add(new WebHttpBehavior());
var proxy = factory.CreateChannel();

Ответ 2

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

<client>
  <endpoint address="http://localhost:9000/GeoConverterService/GeoConverterService.svc"
            binding="webHttpBinding" 
            contract="GeoConverter.IGeoConverterService" 
            behaviorConfiguration="webhttp"/>
</client>

<behaviors>
  <endpointBehaviors>
    <behavior name="webhttp">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>

Ответ 3

Итак, это, наконец, подошло к концу!

Брайан - спасибо за ваше руководство по этому поводу. Связывание было неверно выровнено b/t клиентом и сервером, и я, наконец, закончил работу следующим образом:

  <basicHttpBinding>
    <binding name="TransportSecurity">
      <security mode="Transport">
        <transport clientCredentialType="None"/>
      </security>
    </binding>
  </basicHttpBinding> 

... и устанавливая соответствующие атрибуты привязки и привязки к конечной точке:

   <endpoint binding="basicHttpBinding" 
             bindingConfiguration="TransportSecurity"
             contract="ServiceReference1.IService" 
             name="WebHttpBinding_IService" 
             address="https://mysslserver.com/Service.svc" />

Так как это относительно новый дерн для меня, просто объяснение причин появления этих ошибок приводит меня в правильном направлении:).

Ответ 4

Я не думаю, что это обязательно имеет отношение к вашему factory.

См

http://msdn.microsoft.com/en-us/library/system.servicemodel.channels.transportbindingelement.manualaddressing.aspx

или другие среди первых нескольких хитов Bing для "manualaddressing". Похоже, что используемое связывание несовместимо с какой-либо другой частью логики стека/обмена сообщениями.

Ответ 5

Да, ответ Джейсона Марделла тоже помог мне, мое обязательство не указывало на поведение. поэтому в привязке я добавил: behaviorConfiguration="webhttp"