我将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端点地址
答案 0 :(得分:2)
谢谢大家的帮助。
我找到了解决这个问题的方法。
<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