Как получить доступ к службе WCF с удаленного рабочего стола на другой компьютер в приложении c#? - PullRequest
0 голосов
/ 09 января 2020

Я развернул службу WCF на IIS машины удаленного рабочего стола. Я могу получить доступ к этой службе в браузере chrome на моей локальной машине, и я добавил его в качестве ссылки на службу в моем проекте. Теперь, когда мой проект пытается получить доступ к сервису, он выдает ошибку типа The caller was not authenticated by the service..

После того, как НИОКР связан с ним, я добавил следующие строки для решения

_client.ClientCredentials.Windows.ClientCredential.Domain = "RDP Computer name";
_client.ClientCredentials.Windows.ClientCredential.UserName = "RDP Username";
_client.ClientCredentials.Windows.ClientCredential.Password = "RDP Password";

и снова, когда я пытаюсь, ошибка изменилась как Client is unable to finish the security negotiation within the configured timeout (00:00:00). The current negotiation leg is 1 (00:00:00).

Я пытаюсь найти доменное имя на RDP-машине согласно предложению от https://support.microsoft.com/en-in/help/17463/windows-7-connect-to-another-computer-remote-desktop-connection. Но я не нашел там никакого доменного имени. это имя рабочей группы доступно в области рабочей группы.

На моем локальном компьютере файл app.config проекта содержит служебный код, как показано ниже:

<system.serviceModel>
    <bindings>
      <wsDualHttpBinding>
        <binding name="WSDualHttpBinding_IService1">
        </binding>
      </wsDualHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://xx.xx.xxx.xxx/Testing/Service1.svc"
        binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_IService1"
        contract="ServiceReference1.IService1" name="WSDualHttpBinding_IService1">
        <identity>
          <servicePrincipalName value="host/RDPName" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>

однако на стороне проекта службы WCF файл web.config содержит ниже код:

<protocolMapping>
      <add binding="basicHttpsBinding" scheme="https"/>
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>

    <services>
      <service name="WcfService.Service1">
        <endpoint address="" binding="wsDualHttpBinding" contract="WcfService.IService1" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <timeouts closeTimeout="00:05:00" openTimeout="00:05:00" />
        </host>
      </service>
    </services>
    <bindings>
      <wsDualHttpBinding>
        <binding name="customBinding0"
                receiveTimeout="00:05:00"
                sendTimeout="00:05:00"
                openTimeout="00:05:00"
                closeTimeout="00:05:00"
                maxBufferPoolSize="2147483647"
                maxReceivedMessageSize="2147483647">
          <security mode="None">
          </security>
        </binding>
      </wsDualHttpBinding>
    </bindings>

Я занимаюсь исследованиями и разработками в последние несколько дней для решения этой проблемы, но не смогу вообще.

Пожалуйста, можете ли вы предложить мне, что я должен сделать для решения этой проблемы?

Спасибо.

1 Ответ

0 голосов
/ 10 января 2020

Со своей стороны, он работает правильно после настройки учетных данных windows. Это связано с тем, что WCF, созданный wsdualhttpbinding, аутентифицирует клиента с учетными данными windows по умолчанию.
Кроме того, почему адрес службы имеет префикс «Testing»? И адрес службы недействителен. Используете ли вы virtual path?
На самом деле нет необходимости использовать двустороннюю привязку. Достаточно Wshttpbinding или nettcpbinding, который также поддерживает дуплексную связь. Wsdualhttpbinding может быть заблокирован брандмауэром, так как он поддерживает контракт обратного вызова.
Пожалуйста, обратитесь к обсуждению ниже.
Дуплекс WCF - клиент не может завершить sh согласование безопасности в течение настроенного времени ожидания
https://social.msdn.microsoft.com/Forums/en-US/21160b92-bed5-4e5d-a1a9-6fc8e84f6299/client-is-unable-to-finish-the-security-negotiation-within-the-configured-timeout-000000-the?forum=csf
https://help.octopus.com/t/client-is-unable-to-finish-the-security-negotiation-within-the-configured-timeout/6827
Не стесняйтесь, дайте мне знать, если я могу чем-то помочь.
Обновлено.
Чтобы исключить проблемы с аутентификацией и сетью, я предлагаю вам сначала использовать Basichttpbinding для создания службы WCF. Клиентская сторона может потреблять услугу на adding service reference. пожалуйста, обратитесь к конфигурации.
На стороне сервера.

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
      <add binding="basicHttpBinding" scheme="http"/>
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

С нетерпением ждем вашего дальнейшего сообщения.

...