我正在尝试将用 c# 语言编写的服务称为 .net 的 WCF 项目。主机的IP会随时间变化。我需要在设计时调用服务而不向客户端添加服务引用,以便以后可以在不编译客户端应用程序的情况下更改它。我从代码项目中找到了这篇文章,但是当我发布我的客户端时,我没有任何配置文件来更改其中的 url。谁能帮我找到如何在运行时更改 Web 服务的 URL 而无需重新编译客户端应用程序最好的问候
3 回答
正如格兰特上面所说,只要服务合同不改变,您就可以更改端点地址,而无需重新编译应用程序本身。
检查您的解决方案资源管理器中是否存在名为 App.config 的文件。(如果您正在制作某种 Web 应用程序,它可能被称为 Web.config。)
我找到了一种简单的方法来做我想做的事。我在互联网上找到了许多解决 .config 文件的页面,但我找不到该文件。这是我解决问题的方法:
Visual Studio 的项目解决方案中有一个 .config 文件。如果这个文件中的地址是正确的,那么发布的程序将不会寻找任何其他文件,例如 .config 文件来获取服务的地址。所以我把项目解决方案中app.config文件中指定的地址改成了一个废话地址。然后不发布项目,只按f6刷新项目的相关文件。我移到了保存我的项目的路径。对我来说是: C:\Users\user\Documents\Visual Studio 2012\Projects\my project 然后我移到 bin 目录,然后是 debug 目录 在这里我找到了我的解决方案的 .exe 文件和一个 .config 文件我正在寻找的正确文件。我将 .exe 和 .config 文件复制到另一个目录中。现在,当我运行 .exe 文件时,它会查找 . 我在它旁边复制的配置文件。如果正确定义了 .config 文件中 Web 服务的地址,那么我可以从此客户端访问 Web 服务中的方法。
我希望它也能帮助那些在不重新编译解决方案的情况下从外部文件中寻找 Web 服务地址的人。
这是一个工作副本。对我来说它工作正常并返回 List
private List<MyClass> GetAllSiteDetailsJSON(string language)
{
Uri address =
new Uri(@"http://weburlpath/MyService/MyService.svc/GetAllList/"
+ language);
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
StreamReader reader = new StreamReader(response.GetResponseStream());
string jSon = reader.ReadToEnd();
reader.Close();
JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
List<MyClass> result = jsSerializer.Deserialize<List<MyClass>>(jSon);
return result;
}
}
这是课程
public class MyClass
{
public string ID { get; set; }
public string Name { get; set; }
public List<Location> Locations { get; set; }
}
public class Location
{
public string Region { get; set; }
public string Country { get; set; }
}