【发布时间】: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