【问题标题】:How to call a wcf service without adding service reference at design time如何在设计时调用 wcf 服务而不添加服务引用
【发布时间】:2013-06-27 09:10:19
【问题描述】:

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

【问题讨论】:

  • 您可以更改端点而无需重新编译,它是可配置的。
  • 您参考的文章是针对 ASMX Web 服务的,它不是 WCF。有一些相似之处,因为 WCF 是旧版 ASMX 的替代品。我可以想出几种方法来通过代码在 WCF 中做你想做的事情,但问题是如果你没有配置文件,你将如何向客户端提供服务地址?换句话说,如果您不使用配置文件,那么当服务地址更改时,您使用什么不需要您重建客户端项目?

标签: c# wcf url reference


【解决方案1】:

正如格兰特上面所说,只要服务契约不改变,你就可以改变端点地址,而无需重新编译应用程序本身。

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

【讨论】:

    【解决方案2】:

    我找到了一种简单的方法来做我想做的事。 我在互联网上找到了许多解决 .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 服务而不重新编译解决方案的人。

    【讨论】:

      【解决方案3】:

      这是一个工作副本。对我来说它工作正常并返回列表

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-14
        • 1970-01-01
        • 2011-03-12
        • 2015-04-15
        • 1970-01-01
        相关资源
        最近更新 更多