【问题标题】:xamarin forms consume wcf service issue when changing the address at runtimexamarin 表单在运行时更改地址时消耗 wcf 服务问题
【发布时间】:2016-09-23 10:12:10
【问题描述】:

在 Visual Studio(最新 v4.0.30319)中使用 Xamarin Forms 并仅针对 Android 平台。尝试使用 wcf 服务,因此在设计时添加服务的地址(添加服务引用)。假设它被称为 MyService.svc,它在地址为 192.168.100.1 的机器上本地运行,添加服务引用 url 是 http://192.168.100.1/MyService.svc。 Add Service Reference 对话框找到该服务并将其添加到 PCL 项目中。目前没问题。

在代码中默认使用服务如下: var client = new MyServiceClient();

当 android 应用程序启动时,一切正常,可以调用服务并按预期从服务返回数据。好东西!到目前为止一切顺利。

然而,问题就从这里开始了。在运行时配置服务的地址并不能使其具有很强的可扩展性。所以需要在运行时针对不同的系统调整服务的地址。一个简单的设置页面允许用户在应用程序中输入服务地址,想法是服务将指向该端点地址,而不是默认的“在设计时配置”地址。 所以我们尝试了以下代码:

var timeout = new TimeSpan(0, 15, 0);
var binding = new BasicHttpBinding()
{
    Name = "basicHttpBinding",
    MaxReceivedMessageSize = 2147483647,
    MaxBufferPoolSize = 2147483647,
    SendTimeout = timeout,
    OpenTimeout = timeout,
    ReceiveTimeout = timeout,
};                  

var endPoint = new EndpointAddress("http://192.168.100.1/MyService.svc");
var client = new MyServiceClient(binding, endPoint);

即使它与设计时配置的服务的地址相同,我们也会收到错误消息“在 {0} 处没有侦听可以接受该消息的端点。这通常是由不正确的地址或 SOAP 操作引起的。有关更多详细信息,请参阅 InnerException(如果存在)。深入研究内部异常只会给出一个“未找到”的网络异常。从调用中删除 endPoint 变量然后再次起作用(因为它恢复到设计时地址)。

有哪位大师可以帮助我们完成这项工作吗?

【问题讨论】:

    标签: android visual-studio wcf xamarin.forms


    【解决方案1】:

    设法让它工作。

    在 var client = new MyServiceClient() 之后检查 Endpoint.Address 将 url 显示为 'http://192.168.100.1/MyService.svc/MyServices.svc',不明白为什么 svc 名称部分在其中两次并且是复数形式,但它现在可以工作了.. ..

    【讨论】:

      猜你喜欢
      • 2015-03-03
      • 2011-07-06
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      • 2017-07-07
      相关资源
      最近更新 更多