2009-12-16 5 views
0

Я пытаюсь использовать веб-службу интрасети с WCF. Я добавил ссылку на услугу с помощью . Добавить ссылку на службу в VS2008. При этом мне было предложено ввести сетевые учетные данные для доступа к предоставленной мне услуге и добавлена ​​ссылка на службу.Использование WCF для использования службы и получения различных ошибок в зависимости от конфигурации привязки

Я тогда написал код, который я хотел бы рассчитывать на неудачу, поскольку он не передавать учетные данные вместе с вызовом службы:

FooServiceClient proxy = new FooServiceClient(); 
bool isValid = proxy.ValidateBar(baz); 

Когда я использую этот код, я receieve исключение:
HTTP-запрос неавторизован с помощью схемы проверки подлинности клиента «Negotiate».
Заголовок аутентификации, полученный с сервера, был «Basic realm =« Kerberos ».

Это та же ошибка, которую я получаю при использовании одного из двух примеров кода ниже.

FooServiceClient proxy = new FooServiceClient(); 
proxy.ClientCredentials.UserName.UserName = "USERNAME"; 
proxy.ClientCredentials.UserName.Password = "PASSWORD"; 
bool isValid = proxy.ValidateBar(baz); 

или

FooServiceClient proxy = new FooServiceClient(); 

NetworkCredential creds = new NetworkCredential("USERNAME", "PASSWORD"); 

proxy.ClientCredentials.Windows.AllowedImpersonationLevel = 
    TokenImpersonationLevel.Identification; 
proxy.ClientCredentials.Windows.AllowNtlm = false; 
proxy.ClientCredentials.Windows.ClientCredential = creds; 

bool isValid = proxy.ValidateBar(baz); 

Моя кишка говорит мне, что у меня есть режим безопасности настроен неправильно. Согласно диспетчеру сервера, конечная точка, к которой я пытаюсь привязываться, ищет базовые учетные данные Http через SSL. Что после прочтения о WCF-BasicHttp Transport Properties привести меня к мысли, что я должен использовать эту конфигурацию:

<security mode="Transport"> 
    <transport clientCredentialType="Windows" /> 
    <message clientCredentialType="UserName" algorithmSuite="Default" /> 
</security> 

К сожалению, я продолжал получать ту же ошибку.

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

+0

Вопрос только в том, что вы пытаетесь использовать службу WCF через SSL? Если это так, вам нужна правильная привязка к обеим точкам. –

+0

Да, это конечная точка * https/ssl *. Я не сторонник службы, которую я пытаюсь использовать. Для чего я считаю, что он написан на Java и размещен на сервере WebLogic. – ahsteele

ответ

0

Нижняя конфигурация связывания WCF оказалась решением.

<security mode="Transport"> 
    <transport clientCredentialType="Basic" proxyCredentialType="None" 
    realm="" /> 
    <message clientCredentialType="UserName" algorithmSuite="Default" /> 
</security> 
2

Вы должны понять, с чем сконфигурирована конечная точка на другом конце. Если он сам размещен и работает под SSL, он должен быть Транспорт, но если он работает под IIS с SSL, то он может быть TransportWithMessageCredentials, а учетные данные транспорта могут быть «Нет».

Очень сложно заставить это правильно связываться.

Что касается исключений, вы получаете

Предоставленный URI схемы 'HTTPS' является недействительным; ожидаемый «http». Параметр Имя:

При использовании TransportCredentialOnly вы должны использовать HTTP связывания, а не HTTPS, и я уверен, что вы не изменяли адрес конечной точки к HTTP, потому что это не то, что справочная служба является.

1

Какая привязка вы используете для сценария вашей интрасети? Рекомендуемой наилучшей практикой будет NetTCP с безопасностью транспорта и учетными данными Windows (при условии, что все ваши абоненты являются интрасети-клиентами с учетной записью в вашей корпоративной службе Active Directory)

Это позволит избежать любого беспорядка http/https.

Однако для размещения netTcp вам понадобится WAS (Windows Process Activation Server), который является частью IIS7 и работает только на Windows Server 2008 (Vista Server) или 2008 R2 (сервер Win7). Или вам нужно разместить свое обслуживание самостоятельно, например. Служба NT.

Много информации все еще отсутствует! Пожалуйста, уточните свой вопрос. Благодаря!

+0

Добавлено уточнение конечной точки. Любая помощь приветствуется. – ahsteele