Windows metro app wcf 地址可配置

本文介绍如何在Windows Metro应用中通过添加服务引用的方式调用WCF服务,并展示了如何通过读取本地配置文件动态设置WCF服务地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在Windows metro app中调用wcf服务可以通过添加 “服务引用”来实现。一旦项目发布则不可修改。这个和桌面开发不一样。

  现在我们通过读取文本的方式来读取wcf地址。

  1、添加所需引用的wcf 地址。

  

  2、添加完之后。自动生成的Reference.cs里面我们可以看到 private static System.ServiceModel.EndpointAddress GetEndpointAddress(EndpointConfiguration endpointConfiguration)这个方法里面有我们添加的地址。我们知道在这个方法里面去读取文本是不可行的。因为这个方法不支持异步(async)。

  

  3、我们把读取文本中的地址放到 App.xaml.cs 的 OnLaunched 方法中去读取。然后把读到的地址放到全局变量中。

  在Reference.cs中读取该全局变量。

  app.xaml.cs下的代码:

  protected override async void OnLaunched(LaunchActivatedEventArgs args)

  {

  var key = await ReadWCFService();

  var localSettings = ApplicationData.Current.LocalSettings;

  if (localSettings.Values.ContainsKey("WCFAPI"))

  localSettings.Values["WCFAPI"] = key;

  else

  localSettings.Values.Add("WCFAPI", key);

  }

  ///

  /// 读取配置文件

  ///

  ///

  public async Task ReadWCFService()

  {

  try

  {

  var storageFolder = KnownFolders.DocumentsLibrary;

  var file = await storageFolder.GetFileAsync("WcfServiceUrl.txt");

  var str = await FileIO.ReadTextAsync(file);

  return str.Trim();

  }

  catch (Exception e)

  {

  }

  return string.Empty;

  }

  Reference.cs下的代码:

  private static System.ServiceModel.EndpointAddress GetEndpointAddress(EndpointConfiguration endpointConfiguration) {

  if ((endpointConfiguration == EndpointConfiguration.BasicHttpBinding_IService1)) {

  var str = string.Empty;

  var localSettings = ApplicationData.Current.LocalSettings;

  if (localSettings.Values.ContainsKey("WCFAPI"))

  {

  str = localSettings.Values["WCFAPI"].ToString();

  }

  return new System.ServiceModel.EndpointAddress(str);

  }

  throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration));

  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值