Вызов службы WCF из Azure ServiceConfig - PullRequest
0 голосов
/ 23 декабря 2011

Я добавил WCF ServiceReference в свое веб-приложение, в мой web.config были созданы следующие записи.

<system.serviceModel>
<bindings>
  <wsHttpBinding>
    <binding name="WSHttpBinding_INameVerification" closeTimeout="00:01:00"
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
      bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
      maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
      textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <reliableSession ordered="true" inactivityTimeout="00:10:00"
        enabled="false" />
      <security mode="Transport">
        <transport clientCredentialType="None" proxyCredentialType="None"
          realm="" />
        <message clientCredentialType="Windows" negotiateServiceCredential="true" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>
<client>
  <endpoint address="https://int. NameVerification.com/Default/NameVerificationService.svc"
    binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_INameVerification"
    contract="NameVerificationService.INameVerification"
    name="WSHttpBinding_INameVerification" />
</client>

Теперь я планирую разместить свое приложение на облачной платформе Azure.После размещения своего приложения в облаке я хочу иметь возможность изменять свои конечные точки в любое время, т. Е.

<endpoint address=”https://int. NameVerification.com/Default/NameVerificationService.svc” 
   binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_INameVerification"
    contract="NameVerificationService.INameVerification"
    name="WSHttpBinding_INameVerification" />

Как мне добавить этот вызов к моей службе WCF из SericeConfig?ServiceConfig, чтобы мое приложение считывало адрес моей конечной точки WCF из конфигурации службы, а не из web.config

Ответы [ 3 ]

2 голосов
/ 13 января 2012

Спасибо всем за помощь.

Я нашел решение этой проблемы.

  1. Связанные привязка и адрес службы в программе, затем добавили настройки в Serviceconfig
  2. Добавлена ​​запись ServiceConfig
<Setting name="myServiceAddressUrl"
    value="https://int.
    NameVerification.com/Default/NameVerificationService.svc" />
    WSHttpBinding binding = new WSHttpBinding();
    binding.Name = "WSHttpBinding_INameServiceVerification";
    binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
    binding.ReliableSession.Enabled = false;
    binding.TransactionFlow = false;
    binding.Security.Mode = SecurityMode.Transport;
    binding.Security.Message.ClientCredentialType = 
        MessageCredentialType.Windows;

    string myServiceAddressUrl = 
        RoleEnvironmentWrapper.GetConfigurationSettingValue(
           "AdderssServiceURL.svc");
    EndpointAddress myService = new EndpointAddress(myServiceAddressUrl);

    NameVerificationClient verificationClient = 
        new NameVerificationClient(binding, myService );
0 голосов
/ 26 декабря 2011

Если я правильно понимаю, вам нужно только изменить конечные точки того сервиса, который вы используете, без повторного развертывания вашего потребляющего сервис приложения, работающего в Azure? Вы не хотите менять конечные точки реального сервиса, так как кажется, что этот сервис является внешним по отношению к вашему решению?

Если это так, я хотел бы предложить, чтобы ваше приложение не зависело от конфигурации конечной точки, указанной в файле web.config, а вместо этого изменило настройки конечной точки в файле ServiceConfig (в любых парах имя-значение, которые вы считаете необходимо) и вручную проанализировать их при создании прокси-сервера для вызова конечной точки третьей стороны. Таким образом, вы получите полный контроль над тем, что вы получаете от web.config (возможно, конфигурация привязки все еще может управляться web.config) и что вы получаете от ServiceConfig (конечная точка UrL и т. Д.) И возможность позже переключать конечную точку в ServiceConfig без повторного развертывания и / или удаления вашего приложения.

Вам потребуется проверить RoleEnvironment, если вы работаете в Azure (реальном или эмуляторе), чтобы читать из ServiceConfig.

НТН

0 голосов
/ 26 декабря 2011

Подумайте об использовании задачи запуска с консольной утилитой, чтобы прочитать конфигурацию из RoleEnvironment и вручную (или с помощью ServiceManager) обновить ваш файл web.config.Другой вариант - использовать Service Factory и прочитать конфигурацию роли перед явным созданием службы.

Возможно, это также можно выполнить с помощью метода WebRole OnStart, но я не уверен, безопасно ли изменять web.configна данный момент

...