我有引用Web服务的代码,并且我希望该Web服务的地址是动态的(从数据库,配置文件等读取),以便可以轻松更改它。这的主要用途是将其部署到计算机名称和IP地址不同的多个环境中。在所有部署中,Web服务签名将相同,仅位于其他位置。
也许我只是被Visual Studio“添加Web引用”向导宠坏了-似乎这应该相对容易一些。
Answers:
当您生成Web参考并在解决方案资源管理器中单击Web参考时。在属性窗格中,您应该看到类似以下内容:
将该值更改为dynamic将在您的app.config中放置一个条目。
这是CodePlex文章,具有更多信息。
api
,正如您在代码中看到的那样,他们已将其编译https://api.mailgun.net/v2/
为api版本2,我想将其更改为版本3 https://api.mailgun.net/v3/
,该怎么办?
我知道这是一个老问题,但是我们的解决方案比我在这里看到的要简单得多。我们将其用于VS2010及更高版本的WCF调用。字符串网址可以来自应用设置或其他来源。在我的情况下,这是一个下拉列表,用户可以在其中选择服务器。通过VS添加服务参考来配置TheService。
private void CallTheService( string url )
{
TheService.TheServiceClient client = new TheService.TheServiceClient();
client.Endpoint.Address = new System.ServiceModel.EndpointAddress(url);
var results = client.AMethodFromTheService();
}
我已经为这个问题苦苦挣扎了几天,终于灯泡发出咔嗒声。能够在运行时更改Web服务URL的关键是重写构造函数,这是我使用部分类声明完成的。上面还将URL行为设置为Dynamic的操作也必须完成。
基本上,这将创建一个Web服务包装程序,如果您必须在某个时候通过添加服务引用来重新加载Web服务,则您不会丢失工作。Microsoft对Partial类的帮助特别指出,此构造的部分原因是要创建Web Service包装器。 http://msdn.microsoft.com/zh-CN/library/wa80x488(v=vs.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;
}
}
}
}
如果要从数据库中获取URL,则可以将其手动分配给Web服务代理类URL属性。这应该在调用web方法之前完成。
如果要使用配置文件,可以将代理类的URL行为设置为动态。
对我而言,对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>