Я столкнулся с той же ошибкой, когда пытался получить доступ к службе WCF, размещенной в IIS, добавив «1001 * Справочник по услуге » в свое приложение Windows Forms. Но когда клиент нажал на вызов метода службы, я получил «UnAuthorized 401 исключение». Вот мое решение этой проблемы:
(1) Я использовал [wsHttpBinding], измените его на [basicHttpBinding], как указано ниже в файле конфигурации службы WCF:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpEndpointBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="ServiceBehavior" name="IService1">
<endpoint address="" binding="basicHttpBinding"
bindingConfiguration="BasicHttpEndpointBinding"
name="BasicHttpEndpoint" contract="IService1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
(2) Добавьте «Service Reference» из вашего клиентского приложения и дайте ему имя (мы будем использовать это имя на следующем шаге как «ProxyCalssName»)
(3) измените файл app.config клиентского приложения следующим образом:
<system.serviceModel>
<client>
<endpoint address="your service URL"
binding="basicHttpBinding" bindingConfiguration="basic" contract="ProxyClassName.ServiceName"
name="default" />
</client>
<bindings>
<basicHttpBinding>
<binding name="basic">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
(4) В коде клиентского приложения:
ProxyClassName.MyServiceName srv = new ProxyClassName.MyServiceName("default");
//default is the name of the endpoint in the app.config file as we did.
srv.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
Удачи, DigitalFox