在运行时

时间:2016-09-23 10:12:10

标签: android visual-studio wcf xamarin.forms

在Visual Studio中使用Xamarin Forms(最新版本v4.0.30319)并仅针对Android平台。尝试使用wcf服务,因此在设计时添加服务的地址(添加服务引用)。假设它被称为MyService.svc,它在地址192.168.100.1的机器上本地运行,添加服务引用URL为http://192.168.100.1/MyService.svc。 “添加服务引用”对话框将查找服务并将其添加到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变量然后再次工作(因为它恢复到设计时地址)。

那里的任何一位大师可以帮我们解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

管理以使其正常工作。

在var client = new之后检查Endpoint.Address MyServiceClient()将url显示为' http://192.168.100.1/MyService.svc/MyServices.svc',不要理解为什么svc名称部分在那里两次并且也是复数,但它现在有效....