C# 如何在设计时调用wcf服务而不添加服务引用

C# 如何在设计时调用wcf服务而不添加服务引用,c#,wcf,url,reference,C#,Wcf,Url,Reference,我正试图调用一个用c语言编写的服务作为.net的WCF项目。 主机的IP将随时间而变化。我需要在设计时调用服务,而不向客户端添加服务引用,以便以后可以在不编译客户端应用程序的情况下对其进行更改。 我从代码项目中找到了这篇文章,但当我发布我的客户端时,我并没有任何配置文件来更改其中的url。 有人能帮我找到如何在运行时更改web服务的URL而不重新编译客户端应用程序吗 最好的祝愿正如Grant在上面所说的,只要服务合同不变,您就可以更改端点地址,而无需重新编译应用程序本身 检查解决方案资源管理器中

我正试图调用一个用c语言编写的服务作为.net的WCF项目。 主机的IP将随时间而变化。我需要在设计时调用服务,而不向客户端添加服务引用,以便以后可以在不编译客户端应用程序的情况下对其进行更改。 我从代码项目中找到了这篇文章,但当我发布我的客户端时,我并没有任何配置文件来更改其中的url。 有人能帮我找到如何在运行时更改web服务的URL而不重新编译客户端应用程序吗
最好的祝愿

正如Grant在上面所说的,只要服务合同不变,您就可以更改端点地址,而无需重新编译应用程序本身


检查解决方案资源管理器中名为App.config的文件。(如果你正在制作某种Web应用,它可能被称为Web.config。)

我找到了一种简单的方法来做我想做的事情。 我在internet上找到了许多指向.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文件。如果.config文件中web服务的地址定义正确,那么我可以从此客户端访问web服务中的方法


我希望它也能帮助那些希望从外部文件寻址web服务的人,而无需重新编译解决方案。

这里是一份工作副本。对我来说,它工作良好,并返回列表

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;
   }
}
私有列表GetAllSiteDetailsJSON(字符串语言) { Uri地址= 新Uri(@)http://weburlpath/MyService/MyService.svc/GetAllList/" +语言); HttpWebRequest-request=WebRequest.Create(address)为HttpWebRequest; request.Method=“GET”; request.ContentType=“application/x-www-form-urlencoded”; 使用(HttpWebResponse=request.GetResponse()作为HttpWebResponse) { StreamReader=新的StreamReader(response.GetResponseStream()); 字符串jSon=reader.ReadToEnd(); reader.Close(); JavaScriptSerializer jsSerializer=新的JavaScriptSerializer(); List result=jsSerializer.Deserialize(jSon); 返回结果; } } 这是课堂

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; }
}
公共类MyClass
{
公共字符串ID{get;set;}
公共字符串名称{get;set;}
公共列表位置{get;set;}
}
公共类位置
{
公共字符串区域{get;set;}
公共字符串国家{get;set;}
}

您可以在不重新编译的情况下更改端点,它是可配置的。您参考的文章是针对ASMX web服务的,它不是WCF。也有相似之处,因为WCF是传统ASMX的替代品。我可以想出几种方法通过代码在WCF中实现您想要的功能,但问题是如果没有配置文件,您将如何向客户端提供服务地址?换句话说,如果您不使用配置文件,那么在服务地址发生更改时,您使用的哪些配置文件不需要重新生成客户端项目?