从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
谢谢大家的帮助。
我找到了一个解决这个问题的方法。
- 程序中关联的绑定和服务地址,然后添加设置到Serviceconfig 新增 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