Как сделать так, чтобы мой вызов службы WCF проходил через настроенный локальный прокси-сервер? - PullRequest
2 голосов
/ 19 ноября 2010

Я написал класс, который отвечает за вызов сторонней службы WCF, и он работает нормально.Наше приложение может быть настроено с настройками прокси локальной сети, поэтому остается только использовать эти настройки (если они были установлены) при совершении вызова.

Я осмотрелся и могуне вижу ничего, что четко указывает, как это сделать.Я обнаружил, что используемый мной объект BasicHttpBinding имеет свойство ProxyAddress, но там нет ничего, что позволяло бы мне определять сетевые учетные данные или имя пользователя и пароль.

Вероятно, это прямо здесь, передо мной, поэтому я думаю,Мне просто нужно указывать в правильном направлении.По крайней мере, я надеюсь, что это так просто!Все, что мне нужно сделать, это сообщить моему сервисному вызову, что такое локальный прокси-сервер и какие учетные данные использовать.

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

// Create the service instance.
var binding = new BasicHttpBinding();
var endPoint = new EndpointAddress(new Uri(_servicesBaseUri + "MyServiceName"));
var service = new WSHsgCreateSchemeRepairClient(binding, endPoint);

// Add the MessageInspector to the contract behaviours list. This will inject the SecurityHeader XML and the SOAP action.
var soapAction = _servicesBaseUri + "MyServiceName/MyServiceMethod";
service.Endpoint.Contract.Behaviors.Add(new MessageInspector(_securityHeaderUsername, _securityHeaderPassword, soapAction));

У нас есть некоторые другие вызовы веб-службы (которые используют старый подход веб-службы), и они генерируютновый экземпляр System.Net.WebProxy и установите его для свойства Proxy класса обслуживания, но, очевидно, он отличается в WCF.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 19 ноября 2010

Думаю, я с этим справился.Системный прокси по умолчанию может быть установлен и использован. Это очень полезная статья , если кто-то еще против такого же требования.

Идея состоит в том, что вы должны сначала установить System.Net.HttpWebRequest.DefaultWebProxy.Credentials (предположительно System.Net.CredentialCache.DefaultCredentials) - вот где "параметры прокси-сервера по умолчанию »берутся, когда для UseDefaultWebProxy привязки установлено значение true.

0 голосов
/ 18 февраля 2016

Вы можете сделать это через настройку web.config, специфичную для вашего сервиса.В конфигурации привязки установите proxyAddress = "http://myproxy:8080" и установите useDefaultWebProxy =" false "

<bindings>
  <basicHttpBinding>
    <binding name="SubscriberFulfilmentServiceSOAP12Binding" closeTimeout="00:01:00"
    openTimeout="00:01:00" receiveTimeout="00:01:00" sendTimeout="00:01:00"
    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
    maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
    textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="false"
    proxyAddress="http://myproxy:8080"
    messageEncoding="Text">
      <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
      maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

Чтобы установить прокси для всех служб:

<system.net>
  <defaultProxy>
    <proxy usesystemdefault="True" proxyaddress="http://myproxy:8080" bypassonlocal="True" />
  </defaultProxy>
</system.net>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...