从Azure ServiceConfig调用WCF服务

本文关键字:WCF 服务 调用 ServiceConfig Azure | 更新日期: 2023-09-27 18:18:42

我将WCF servicerreference添加到我的web应用程序中,下面的条目被创建到我的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" />
ServiceConfig中的实际条目是什么,以便我的应用程序将从service配置而不是从web.config

从Azure ServiceConfig调用WCF服务

读取我的WCF端点地址?

谢谢大家的帮助。

我找到了一个解决这个问题的方法。

  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 );

考虑使用带有控制台实用程序的启动任务从RoleEnvironment读取配置并手动(或使用ServiceManager)更新您的web.config。另一种选择是在显式创建服务之前使用服务工厂并读取角色配置。

也许它也可以通过使用WebRole OnStart方法来完成,但我不确定修改web是否安全。此时配置

如果我理解正确的话,您只是希望更改您所使用的服务的端点,而不需要重新部署在Azure中运行的服务消费应用程序?您不希望更改实际服务的端点,因为该服务似乎在您的解决方案之外?

如果是这样,我想建议你让你的应用程序不依赖于在web中指定的端点配置。而是在ServiceConfig文件中记录您的端点设置(在您认为需要的任何名称-值对中),并在构建代理以调用第三方端点时手动解析它们。这样你就可以完全控制你从网上得到的东西。配置(也许绑定配置仍然可以由web.config驱动)和您从ServiceConfig获得的内容(端点UrL等),并且能够稍后在ServiceConfig中切换端点,而无需重新部署和/或关闭您的应用程序。

如果你在Azure (real或emulator)下运行,你需要检查RoleEnvironment,以便从ServiceConfig中读取。

HTH