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

本文关键字:服务 添加 引用 wcf 调用 | 更新日期: 2023-09-27 18:20:02

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

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

正如Grant上面所说,只要服务契约不更改,就可以在不重新编译应用程序本身的情况下更改端点地址。

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

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

visualstudio中的项目解决方案中有一个.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;
   }
}

这是类

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; }
}