Ошибка WCF: на этой фабрике включена ручная адресация, поэтому все отправленные сообщения должны быть предварительно адресованы
у меня есть размещенная служба WCF, для которой я создал пользовательскую фабрику, так что это будет работать с несколькими заголовками хоста:
/// <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());
}
}
Я уверен, что мои файлы конфигурации теперь правы, как на клиенте, так и на сервере (можно посмотреть здесь).
ошибка, которую я получаю, похоже, связана с фабрикой:
ручная адресация включена на этой фабрике, поэтому все отправленные сообщения должны быть предварительно адресованы.
public string GetData(int value) {
return base.Channel.GetData(value);
}
ошибка происходит в строке return base.Channel.GetData(value);
.
5 ответов
Я испытал эту ошибку, и проблема была решена путем добавления WebHttpBehavior (строка 2 ниже):
var factory = new ChannelFactory<IService>(new WebHttpBinding(), uri);
factory.Endpoint.Behaviors.Add(new WebHttpBehavior());
var proxy = factory.CreateChannel();
Я добавил ссылку на службу, как обычно, и получил эту ошибку. Оказывается, все, что мне нужно было сделать, это изменить конфигурацию клиента, чтобы использовать конфигурацию конечной точки с поведением, указывающим 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>
Итак, это, наконец, подошло к концу!
Брайан-спасибо за ваше руководство по этому вопросу. Привязки были неправильно выровнены b / t клиент и сервер, и я, наконец, закончил со следующим в обоих:
<basicHttpBinding>
<binding name="TransportSecurity">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</basicHttpBinding>
... и установка их атрибутов привязки конечной точки и bindingconfiguration соответственно:
<endpoint binding="basicHttpBinding"
bindingConfiguration="TransportSecurity"
contract="ServiceReference1.IService"
name="WebHttpBinding_IService"
address="https://mysslserver.com/Service.svc" />
поскольку это относительно новый дерн для меня, просто объяснение того, почему эти ошибки выскакивали, привело меня в правильном направлении :).
Я не думаю, что это обязательно имеет отношение к вашей фабрике.
посмотреть
или другие среди первых нескольких хитов Bing для "manualaddressing". Похоже, что используемая привязка несовместима с какой-то другой частью логики стека/обмена сообщениями.
Да, Ответ Джейсона Марделла работал и для меня, моя привязка не указывала на поведение. поэтому в переплете я добавил:behaviorConfiguration="webhttp"