2010-12-07 2 views
2

Логистика: 1 сервер, на котором работает служба WCF. 1 сервер работает с базой данных для службы WCF.Служба WCF не выдала себя за клиента

Вопрос: У меня есть служба WCF, работающая на 1 сервере, которая подключается к отдельному серверу для получения необходимых данных, которые необходимо получить. Моя проблема заключается в том, что при вызове службы с клиентской машины я получаю ошибку sql базы данных, в которой указано, что «Ошибка входа в систему для пользователя« NT AUTHORITY \ ANONYMOUS LOGON ». Я считаю, что я создал службу WCF для использования олицетворения.

WCF сервера Config:

<bindings> 
    <ws2007HttpBinding> 
    <binding maxReceivedMessageSize="214748"> 
     <security mode="Message"> 
     <transport clientCredentialType="Windows" 
        proxyCredentialType="Windows" realm="" /> 
     <message clientCredentialType="Windows" negotiateServiceCredential="true" 
       algorithmSuite="Default" establishSecurityContext="true" /> 
     </security> 
    </binding> 
    </ws2007HttpBinding> 
</bindings> 
<services> 
    <service behaviorConfiguration="Host.ServiceBehavior" name="Wcf.MyWebService"> 
    <endpoint address="" behaviorConfiguration="" 
       binding="ws2007HttpBinding" contract="Wcf.MyWebServiceSoap"> 
     <identity> 
     <servicePrincipalName value="ServerMachineName" /> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" 
       contract="IMetadataExchange" /> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="Host.ServiceBehavior"> 
     <serviceMetadata httpsGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <serviceAuthorization impersonateCallerForAllOperations="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

службы WCF Код:

public class MySebService: MyWebServiceSoap 
{ 
    [OperationBehavior(Impersonation = ImpersonationOption.Required)] 
    public string TestWebMethod() 
    { 
    DbDal dal = CreateDataAccessLayer(); 

    return dal.GetStringFromDatabase(); 
    } 
} 

конфигурации клиента и код:

Я программно установить следующие элементы конфигурации:

public void TestWebMethod() 
{ 
    WS2007HttpBinding binding = new WS2007HttpBinding(); 
    EndpointAddress endpoint = new EndpointAddress("uri"); 
    ServiceClient client = new ServiceClient(binding, endpoint); 
    client.ClientCredentials.Windows.AllowedImpersonationLevel = 
           TokenImpersonationLevel.Impersonation; 
    client.ClientCredentials.Windows.AllowNtlm = true; 
    string result = client.TestWebMethod(); 
    client.Close(); 
} 

ответ

1

TokenImpersonationLevel.Impersonation позволяет службе получать доступ к локальным ресурсам службы, но не разрешает службе получать доступ к внешним ресурсам (например, к другой службе).

Вы должны установить допустимый уровень олицетворения TokenImpersonationLevel.Delegation.

client.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation; 
+0

Я думал, что попытался изменить его на делегирование, и это не сработало. Но я снова это сделаю. Соответствуют ли элементы конфигурации службы и клиента? – arc1880 2010-12-07 05:35:02

Смежные вопросы