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

时间:2013-06-27 09:10:20

标签: c# wcf url reference

我试图将用c#语言编写的服务称为.net的WCF项目。  主机的IP将随时间变化。我需要调用服务而不在设计时向客户端添加服务引用,以便我可以在以后更改它而无需编译客户端应用程序。  我在代码项目中找到了this文章但是当我发布我的客户端时,我没有任何配置文件来更改其中的url。  任何人都可以帮我找到如何在运行时更改Web服务的URL而无需重新编译客户端应用程序  最好的问候

3 个答案:

答案 0 :(得分:0)

正如Grant所说,只要服务合同没有改变,你就可以改变端点地址,而无需重新编译应用程序本身。

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

答案 1 :(得分:0)

我找到了一种简单的方法来做我想做的事情。  我在互联网上找到很多寻址.config文件的页面,但我找不到该文件。  这就是我解决问题的方法:

visual studio中的项目解决方案中有一个.config文件。如果此文件中的地址正确,则发布的程序将不会查找任何其他文件(如.config文件)以获取服务的地址。所以我将项目解决方案中app.config文件中指定的地址更改为无意义的地址。  然后没有发布项目,我只按f6刷新项目的相关文件。  我移动到保存项目的路径。对我来说是:C:\ Users \ user \ Documents \ Visual Studio 2012 \ Projects \ my project  然后我移动到bin目录然后调试目录  在这里,我找到了我的解决方案的.exe文件和.config文件,这是我正在寻找的正确文件。  我将.exe和.config文件复制到另一个目录中。现在,当我运行.exe文件时,它将查看我在其旁边复制的.config文件。如果正确定义了.config文件中的Web服务的地址,那么我可以从该客户端访问Web服务中的方法。

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

答案 2 :(得分:0)

这是一份工作副本。对我来说它工作正常并返回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; }
}