从Azure ServiceConfig调用WCF服务

时间:2011-12-22 21:46:00

标签: c# wcf azure azure-configuration

我将WCF Servicereference添加到我的webapplication中,以下条目已创建到我的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" />

如何从SericeConfig向WCF服务添加此调用?ServiceConfig中的实际内容是什么,以便我的应用程序将从Service config而不是web.config中读取我的WCF端点地址

3 个答案:

答案 0 :(得分:2)

谢谢大家的帮助。

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

  1. 程序中的关联绑定和serviceaddress,然后添加 设置到Serviceconfig
  2. ServiceConfig条目已添加
  3. <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 );
    

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

如果是这样,我建议您使应用程序不依赖于web.config文件中指定的端点配置,而是在ServiceConfig文件中检测端点设置(无论您感觉到的是什么名称 - 值对)需要)并在构建代理时手动解析它们以调用第三方端点。通过这种方式,您可以完全控制从web.config获得的内容(也许绑定配置仍然可以由web.config驱动)以及从ServiceConfig(终点UrL等)获得的内容能够在ServiceConfig中稍后切换端点,无需重新部署和/或删除您的应用程序。

如果您在Azure(真实或模拟器)下运行以便从ServiceConfig中读取,则需要检查RoleEnvironment。

HTH