我怎么能动态交换机网络服务的地址。网络没有重新编译?
-
02-07-2019 - |
题
我的代码中引用了一个网服务,和我想的地址,网络服务是动态(阅读据库中的数据,配置文件,等等。) 所以,它很容易改变。一个主要使用的这个将被部署到多个环境中的机姓名和IP地址是不同的。该网服务签名将同所有部署,只是位于其他地方。
也许我只是被宠坏了通过视觉工作室"加网参考"向导-看起来这应该是相对容易,虽然。
解决方案
其他提示
如果您真的动态设置它,则应设置要调用的代理类实例的.Url字段。
在程序中设置.config文件中的值:
-
一团糟;
-
在下一个应用程序启动之前可能无法读取。
醇>
如果每次安装只需要做一次,我会同意其他海报并使用.config文件和动态设置。
我知道这是一个老问题,但我们的解决方案比我在这里看到的要简单得多。我们将它用于VS2010及以上的WCF调用。字符串网址可以来自应用设置或其他来源。在我的例子中,它是一个用户选择服务器的下拉列表。该服务是通过VS添加服务引用配置的。
private void CallTheService( string url )
{
TheService.TheServiceClient client = new TheService.TheServiceClient();
client.Endpoint.Address = new System.ServiceModel.EndpointAddress(url);
var results = client.AMethodFromTheService();
}
我一直在努力与这个问题的几天和最后的灯泡点击。关键的是能够改变的网址服务在运行时是压倒一切的构造,这是我做的一个分部级宣言》。上述,设置URL行为的动态,也必须做到的。
这基本上创建了一个网络服务包装在那里如果你有重新装载网服务在某些时候,通过增加服务的参考,你不要失去你的工作。Microsoft帮助为部分课程专门的国家的部分原因这个结构是建立网服务包装。 http://msdn.microsoft.com/en-us/library/wa80x488(v=与100).aspx
// Web Service Wrapper to override constructor to use custom ConfigSection
// app.config values for URL/User/Pass
namespace myprogram.webservice
{
public partial class MyWebService
{
public MyWebService(string szURL)
{
this.Url = szURL;
if ((this.IsLocalFileSystemWebService(this.Url) == true))
{
this.UseDefaultCredentials = true;
this.useDefaultCredentialsSetExplicitly = false;
}
else
{
this.useDefaultCredentialsSetExplicitly = true;
}
}
}
}
将网址行为更改为“动态”。
只要Web服务方法和底层公开的类没有改变,它就相当简单。使用Visual Studio 2005(及更高版本),添加Web引用会创建具有此URL的app.config(或web.config,用于Web应用程序)部分。您所要做的就是编辑app.config文件以反映所需的URL。
在我们的项目中,我们的简单方法是根据环境类型(开发,测试,生产)对app.config条目进行评论。因此,我们只需取消注释所需环境类型的条目。那里不需要特殊的编码。
只是注意到关于差异的认识静态和动态。
- 静:你必须设置URL酒店的每一次你的电话网服务。这是因为基地址如果网络服务是在该代理类构造。
- 动态:一个特殊配置的关键将是为你创造你的 网。config 文件。默认代理类会读URL这个关键。
如果要从数据库中提取URL,可以手动将其分配给Web服务代理类URL属性。这应该在调用Web方法之前完成。
如果您想使用配置文件,可以将代理类URL行为设置为动态。
绝对使用Url属性是要走的路。是否在app.config,数据库或第三个位置排序中设置它取决于您的配置需求。有时您不希望在更改Web服务位置时重新启动应用程序。您可能没有负载均衡器来缩放后端。您可能正在热修补Web服务错误。您的实现也可能存在安全配置问题。无论是生产db用户名和密码,还是ws安全认证信息。正确的职责分离可以让你进入一些更复杂的配置设置。
如果在代理生成的类周围添加包装类,则可以在每次创建包装类以调用Web方法时以统一的方式设置Url属性。
打开solition explorer
右键单击webservice将URL行为更改为动态
单击解决方案资源管理器中的“显示所有文件”图标
Web引用中的编辑Reference.cs文件
更改构造函数
public Service1() {
this.Url = "URL"; // etc. string variable this.Url = ConfigClass.myURL
}
对我来说,对WebService的引用是
服务参考
无论如何,这很容易。正如有人所说,你只需要更改web.config文件中的URL。
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="YourServiceSoap" />
</basicHttpBinding>
</bindings>
<client>
**** CHANGE THE LINE BELOW TO CHANGE THE URL ****
<endpoint address="http://10.10.10.100:8080/services/YourService.asmx"
binding="basicHttpBinding" bindingConfiguration="YourServiceSoap"
contract="YourServiceRef.YourServiceSoap" name="YourServiceSoap" />
</client>