Если вы хотите использовать ClientCredential с именем пользователя / паролем, вам необходимо настроить его в app.config на стороне клиента следующим образом - либо использовать транспорт или безопасность сообщений, в зависимости от того, что вам подходит, а затем указать
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="UserNameSecurity">
<security mode="Message">
<message clientCredentialType="UserName"/>
</security>
</binding>
</basicHttpBinding>
и затем вам нужно использовать эту конфигурацию привязки «UserNameSecurity» в вашей конечной точке на клиенте:
<client>
<endpoint address="http://localhost:8888/MyService"
binding="basicHttpBinding" bindingConfiguration="UserNameSecurity"
contract="IMyService" />
На стороне сервера вам необходимо определить, как аутентифицировать пользователя - либо с помощью Windows (домен Active Directory), либо с помощью поставщиков членства ASP.NET (и связанных с ними пользовательских баз данных):
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="Default">
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="MembershipProvider"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
В этом случае ваше имя пользователя / пароль будут проверены по базе данных членства ASP.NET.
Если все это происходит в интрасети, внутри компании, я бы, однако, предпочел бы использовать интегрированную защиту Windows повсюду - ее гораздо проще настраивать и использовать, а также она более надежна и безопасна. Но это работает только внутри компании, внутри корпоративных брандмауэров.
Марк