Связь WCF через домены - PullRequest
       2

Связь WCF через домены

1 голос
/ 26 января 2011

У меня есть служба WCF рабочего процесса (ServiceDMZ), которая установлена ​​на сервере через брандмауэр. Этот сервис работает под учетной записью Windows на этом сервере. Имя учетной записи: DMZDomain \ DMZUserName.

У меня есть другая служба WCF рабочего процесса, работающая на моей машине разработки (ServiceDev). Это собственная служба, работающая под моей учетной записью Windows: DevDomain \ DevUserName.

ServiceDev взаимодействует с ServiceDMZ, используя wsHttpContextBinding и корреляцию контекста в действиях отправки и получения. ServiceDMZ использует адрес обратного вызова для связи с ServiceDev, когда он завершает выполнение задачи.

Я получаю эту ошибку при отправке активности ServiceDev:

System.ServiceModel.Security.SecurityNegotiationException: вызывающая сторона не была аутентифицирована службой. ---> System.ServiceModel.FaultException: запрос маркера безопасности не может быть выполнен из-за сбоя аутентификации. в System.ServiceModel.Security.SecurityUtils.ThrowIfNegotiationFault (сообщение-сообщение, цель EndpointAddress) в System.ServiceModel.Security.IssuanceTokenProviderBase`1.ThrowIfFault (сообщение-сообщение, конечная точка EndpointAddress) в System.ServiceMesseSextBext_Exchange.Exchange.Ext_Exchange.Exchange.Ext_Exchange.Exchange.Ext_Exchange.Exchange.Conject_set_set_set_set_set_set_set_set_set_set_set_set_set_set_set_1 SspiNegotiationTokenProviderState sspiState) --- Конец трассировки стека внутренней исключительной ситуации --- в System.ServiceModel.Activities.InternalSendMessage.OnSendFailure (контекст NativeActivityFaultContext, исключение распространяется, Исключение, ActivityInstance spreadatedFrom) в ExceptionIntection.Exception spreadatedException, ActivityInstance spreadatedFrom) в System.Activities.Runtime.FaultCallbackWrapper.FaultWorkItem.Execute (исполнитель ActivityExecutor, BookmarkManager bookmarkManager)

Какими должны быть настройки в файле app.config для ServiceDev и ServiceDMZ?

Спасибо!

Здравствуйте, спасибо за комментарии. Вот файлы конфигурации.

ServiceDev

  <system.serviceModel>
<services>
  <service name="ServiceDev" behaviorConfiguration="ServiceDevBehavior">
    <host>
      <baseAddresses>
        <add baseAddress="http://10.204.78.16:9101/"/>
      </baseAddresses>          
    </host>
    <endpoint address="http://10.204.78.16:9101/ServiceDev" binding="wsHttpBinding" contract="IServiceDev" bindingConfiguration="ServiceDevBinding"></endpoint>
    <endpoint address="http://10.204.78.16:9101/ServiceDev/mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
    <endpoint address="http://10.204.78.16:9101/ServiceDevCallback" binding="wsHttpContextBinding" contract="IServiceDevCallback" bindingConfiguration="ClientServiceDMZBinding"></endpoint>        
  </service>
</services>
<client>
  <endpoint address="http://10.169.24.14:9100/ServiceDMZ" binding="wsHttpContextBinding" contract="IServiceDMZ" name="ClientServiceDMZ" bindingConfiguration="ClientServiceDMZBinding">
    <identity>
      <userPrincipalName value="DMZUserName@dmzsvr1.mysite.com"/>
    </identity>
  </endpoint>
</client>
<bindings>
  <wsHttpBinding>
    <binding name="ServiceDevBinding" maxReceivedMessageSize="8388608">
      <security>
        <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>
        <message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="TripleDesRsa15" establishSecurityContext="true"/>
      </security>
    </binding>
  </wsHttpBinding>
  <wsHttpContextBinding>
    <binding name="ClientServiceDMZBinding" clientCallbackAddress="http://10.204.78.16:9101/ServiceDevCallback">
      <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
      <security>
        <message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default"/>
        <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>
      </security>
    </binding>
  </wsHttpContextBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceDevBehavior">
      <serviceDebug includeExceptionDetailInFaults="true" httpHelpPageEnabled="true"/>
      <serviceMetadata httpGetEnabled="true"/>
      <sqlWorkflowInstanceStore connectionStringName="MySite.Deployment.Data.Providers.WorkflowInstanceStoreProvider" instanceCompletionAction="DeleteNothing" instanceLockedExceptionAction="BasicRetry" instanceEncodingOption="GZip" hostLockRenewalPeriod="00:01:00"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<standardEndpoints>
  <dynamicEndpoint>
    <standardEndpoint name="ClientServiceDMZDynamicEndpointConfiguration">
      <discoveryClientSettings>
        <endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="ServiceDMZUDPDiscoveryEndpoint"></endpoint>
      </discoveryClientSettings>
    </standardEndpoint>
  </dynamicEndpoint>
  <udpDiscoveryEndpoint>
    <standardEndpoint name="ServiceDMZUDPDiscoveryEndpoint" discoveryVersion="WSDiscovery11">
    </standardEndpoint>
  </udpDiscoveryEndpoint>
</standardEndpoints>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
<diagnostics performanceCounters="All">
  <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="30000" maxSizeOfMessageToLog="2000000">
  </messageLogging>
</diagnostics>

ServiceDMZ

<system.serviceModel>
<services>
  <service name="ServiceDMZ" behaviorConfiguration="ServiceDMZBehavior">
    <host>
      <baseAddresses>
        <add baseAddress="http://10.169.24.14:9100/"/>
      </baseAddresses>
    </host>
    <endpoint address="http://10.169.24.14:9100/ServiceDMZ" binding="wsHttpContextBinding" contract="IServiceDMZ" bindingConfiguration="ServiceDMZBinding" behaviorConfiguration="ServiceDMZEndpointBehavior" />
    <endpoint address="http://10.169.24.14:9100/ServiceDMZ/mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
    <endpoint name="udpDiscovery" kind="udpDiscoveryEndpoint" />
  </service>
</services>
<bindings>
  <wsHttpContextBinding>
    <binding name="ServiceDMZBinding" clientCallbackAddress="http://10.204.78.16:9101/ServiceDevCallback">
      <security>
        <message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default"/>
        <transport clientCredentialType="Windows" realm="" proxyCredentialType="None"/>
      </security>
    </binding>
  </wsHttpContextBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceDMZBehavior">
      <serviceDebug includeExceptionDetailInFaults="true" httpHelpPageEnabled="true"/>
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDiscovery>
        <announcementEndpoints>
          <endpoint kind="udpAnnouncementEndpoint" />
        </announcementEndpoints>
      </serviceDiscovery>
    </behavior>
  </serviceBehaviors>

  <endpointBehaviors>
    <behavior name="ServiceDMZEndpointBehavior">
      <endpointDiscovery>
        <scopes>

        </scopes>
      </endpointDiscovery>
    </behavior>
  </endpointBehaviors>
</behaviors>

<standardEndpoints>
  <udpDiscoveryEndpoint>
    <standardEndpoint name="ServiceDMZUDPDiscoveryEndpoint" discoveryVersion="WSDiscovery11" maxResponseDelay="00:00:00.600"/>
  </udpDiscoveryEndpoint>
</standardEndpoints>

<diagnostics performanceCounters="All">
  <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="30000" maxSizeOfMessageToLog="2000000">        
  </messageLogging>
</diagnostics>    

1 Ответ

0 голосов
/ 26 января 2011

Это может быть проблемой частичного доверия. Безопасность для WCF требует полного доверия для полной функциональности, без этого она поддерживает только подмножество функциональности, см. http://msdn.microsoft.com/en-us/library/bb412186.aspx

Также, если вы используете проверку подлинности Windows, это потребует доверия между доменами, при условии, что ваши машины находятся в разных доменах.

...