У меня есть веб-сервис, созданный с использованием Apache CXF, и два клиента .NET, использующие веб-ссылки (не сервисные ссылки).Клиент Compact Framework работает, но настольный клиент .NET 4.0 работает только при разговоре с localhost
.Вот настройки клиента:
var client = new Permission.Permission();
client.Credentials = new NetworkCredential(username, password);
client.PreAuthenticate = true;
client.Url = url + "/Permission";
Если url
равно http://localhost:8080/
, вызов завершается успешно, но если это http://127.0.0.1:8080
, вызов завершается с ошибкой 401. По какой-то причине сгенерированный код клиента останавливается наответ 401 и не отправляет имя пользователя и пароль.
Редактировать: Я нашел виновника, но не знаю окончательного ответа. Visual Studio вставил этот разделв файл app.config
:
<applicationSettings>
<MyService.Properties.Settings>
<setting name="MyService_Permission_Permission" serializeAs="String">
<value>http://localhost:8080/api/Permission</value>
</setting>
</MyService.Properties.Settings>
</applicationSettings>
Аутентификация работает, если я изменю app.config
на соответствующий URL-адрес.Итак, мой ключевой вопрос: как мой код дает сгенерированному клиенту команду переключиться на другой экземпляр веб-службы, не редактируя app.config
и не перезапускаясь?
Для получения дополнительной информации, когда я перемещаю код службы вдругая машина Wireshark показывает следующую последовательность:
Служба для клиента:
HTTP/1.1 100 Continue\r\n
Клиент для службы:
POST /api/Permission HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.225)
VsDebuggerCausalityData: uIDPo8B4pxEyITVOlb6i18R2juMAAAAACwClY0YyykuVhoiZKG7oEPZ1kukkB6NLnxx6RVnHjT8ACQAA
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Host: xxxxxx:8080
Content-Length: 307
Expect: 100-continue
Служба клиенту:
HTTP/1.1 401 Unauthorized
Content-Length: 0
content-type: text/xml; charset=utf-8
Expect: 100-continue
Host: xxx:8080
SOAPAction: ""
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.225)
VsDebuggerCausalityData: uIDPo8B4pxEyITVOlb6i18R2juMAAAAACwClY0YyykuVhoiZKG7oEPZ1kukkB6NLnxx6RVnHjT8ACQAA
WWW-Authenticate: Basic realm=realm
Server: Jetty(6.1.25)
В этот момент клиент должен повторить POST с добавленным заголовком базовой аутентификации, но вместо этого он останавливается.