Ошибка WCF при выполнении: на этой фабрике включена ручная адресация, поэтому все отправленные сообщения должны быть предварительно адресованы
У меня есть служба WCF, размещенная с помощью WebHttpBinding. Сервис очень прост, договор на эксплуатацию, который принимает несколько параметров. Мой клиент WCF, автоматически сгенерированный после использования "Добавить ссылку на службу", не может напрямую использовать службу WCF. Ошибка возникает только для WebHttpBinding, но не для других.
Сторона сервера
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "Submit2String", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Wrapped)]
string Submit2String(string input1, string input2);
Сторона клиента
ExpenseServiceClient proxy = new ExpenseServiceClient();
proxy.Submit2String("test1", "test2");
Когда я тестирую запуск моего кода выше, я получаю следующую ошибку:
Error: InvalidOperationException was unhandled by user code
Manual addressing is enabled on this factory, so all messages sent must be pre-addressed.
Вот как выглядит мой автоматически сгенерированный файл конфигурации после использования "Add Service Reference":
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="webHttp">
<security mode="None">
<transport clientCredentialType="None" />
</security>
</binding>
</webHttpBinding>
</bindings>
<client>
<endpoint binding="webHttpBinding"
bindingConfiguration="webHttp"
contract="ExpenseService.IExpenseService"
address="http://localhost/myservices/ExpenseService.svc">
</endpoint>
</client>
</system.serviceModel>
1 ответ
Я понимаю, что только WebHttpBinding имеет эту проблему. Чтобы решить эту проблему, просто добавьте конфигурацию поведения в файл конфигурации на стороне клиента следующим образом:
<behaviors>
<endpointBehaviors>
<behavior name="webEndpoint">
<webHttp defaultBodyStyle="Wrapped"
defaultOutgoingResponseFormat="Xml"
helpEnabled="true"/>
</behavior>
</endpointBehaviors>
</behaviors>
Затем обновите конечную точку клиента, чтобы использовать описанное выше поведение конечной точки.
<client>
<endpoint binding="webHttpBinding"
bindingConfiguration="webHttp"
behaviorConfiguration="webEndpoint"
contract="ExpenseService.IExpenseService"
address="http://myservices/ExpenseService.svc">
</endpoint>
</client>
Проблема должна быть решена.