Ошибка 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);
.
Ответы
Ответ 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"