Позвоните в службу HTTPS REST из WCF - PullRequest
3 голосов
/ 20 декабря 2011

Мне нужно позвонить в некоторые службы REST со стороннего сервера через HTTPS. Я думал, что я создам себе симпатичную маленькую библиотеку WCF для обработки этих вызовов и десериализации ответов. Я немного отклеился, хотя.

Службы, которые я пытаюсь вызвать, имеют тестовую службу, которая просто отвечает ОК.

Я создал OperationContract в моем интерфейсе, как показано ниже:

[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare,
    ResponseFormat = WebMessageFormat.Xml,
    UriTemplate = "test")]
 string Test();

В моем сервисном коде у меня есть публичный метод ниже:

public string Test()
{
    ChannelFactory<IService1> factory = new ChannelFactory<IService1>("UMS");
    var proxy = factory.CreateChannel();
    var response = proxy.Test();
    ((IDisposable)proxy).Dispose();
    return (string)response;
}

Мой app.config выглядит так:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.web>
    <compilation debug="true" />
  </system.web>
  <system.serviceModel>
    <client>
      <endpoint address="https://61.61.34.19/serv/ums/"
              binding="webHttpBinding"
              behaviorConfiguration="ums"
              contract="WCFTest.IService1"
              bindingConfiguration="webBinding"
              name="UMS" />
    </client>
    <services>
      <service name="WCFTest.Service1" behaviorConfiguration="WCFTest.Service1Behavior">
        <host>
          <baseAddresses>
            <add baseAddress = "http://localhost:8731/Design_Time_Addresses/WCFTest/Service1/" />
          </baseAddresses>
        </host>
        <endpoint address ="" binding="wsHttpBinding" contract="WCFTest.IService1">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="ums">
          <clientCredentials>
            <clientCertificate findValue="restapi.ext-ags.801" 
                               storeLocation="CurrentUser" 
                               x509FindType="FindBySubjectName"/>
          </clientCredentials>
          <webHttp/>
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="WCFTest.Service1Behavior">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>       
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <webHttpBinding>
        <binding name="webBinding">
          <security mode="Transport">
            <transport clientCredentialType="Certificate" proxyCredentialType="None"/>
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

Я пытаюсь вызвать метод теста, но получаю сообщение об ошибке «Не удалось установить доверительные отношения для безопасного канала SSL / TLS с правами доступа« 61 .61.34.19 ».»

Кто-нибудь может увидеть, что мне здесь не хватает?

Любая помощь приветствуется. Приветствия.

Ответы [ 2 ]

1 голос
/ 20 декабря 2011

Не удалось установить доверительные отношения для безопасного канала SSL / TLS с полномочиями '61 .61.34.19 '.

Обычно это означает, что есть проблема с сертификатом SSL сервера. Это был самоподписанный? Если это так, вы должны установить доверие для сертификата, обычно , доверяя выдающему центру сертификации или устанавливая сертификат в хранилище сертификатов Windows .

0 голосов
/ 12 июля 2013

Попробуйте изменить настройку безопасности webHttpBinding с «Транспорт» на «Нет».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...