Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Android访问.NET WCF服务_Wcf - Fatal编程技术网

从Android访问.NET WCF服务

从Android访问.NET WCF服务,wcf,Wcf,我有一个.NETWCF服务(不是web服务),它有许多方法,有些方法接受和返回复杂的数据类型。我通过Windows Phone 7应用程序使用这些服务。这一切都很好,很容易 现在我正在评估将我的一些应用程序移植到Android的可行性,但我不知道如何从Android客户端调用我的WCF服务 我有一个工作的例子,我发现在 但这看起来是在访问“Web服务”,而不是WCF服务 我的服务在http://www.deanblakely.com/Service2.svc,它包含一个名为“SimpleTest

我有一个.NETWCF服务(不是web服务),它有许多方法,有些方法接受和返回复杂的数据类型。我通过Windows Phone 7应用程序使用这些服务。这一切都很好,很容易

现在我正在评估将我的一些应用程序移植到Android的可行性,但我不知道如何从Android客户端调用我的WCF服务

我有一个工作的例子,我发现在

但这看起来是在访问“Web服务”,而不是WCF服务

我的服务在
http://www.deanblakely.com/Service2.svc
,它包含一个名为“SimpleTest”的简单方法,该方法只返回字符串“Alive”

使用链接文章中的代码,我将
http://www.deanblakely.com/Service2.svc
位于SOAP地址中,SimpleTest位于操作名称中。但我不知道在SOAP_操作和WSDL_目标_名称空间中放置什么。我甚至不知道这种方法是否有效

在.NET中,VisualStudio为我们构建了一个“服务引用”,一切正常

我也不明白下面两行代码

httpTransport.call(SOAP_ACTION, envelope);
Object response = envelope.getResponse();

对于WCF服务,调用是异步的,因此我们调用SimpleTestAsync并为异步返回留下回调。这两行代码似乎是同步的,不是吗?

当从非Windows客户端与WCF服务通信时,您基本上将其视为XML Web服务。如果您将WCF服务配置为使用basicHttp绑定,就Java而言,它的行为将与任何其他web服务一样

通常,要从Java调用WCF服务,可以使用
wsimport
创建一组定制的代理和数据类,类似于服务引用的工作方式。Android没有这些类所需的所有库,但我确实找到了这个URL:

这是一个专门为Android开发的代理类生成器。您可能希望下载此代理生成器,而不是使用该网页上的代码;您只需将URL传递给服务的WSDL页面,它就会为所有内容创建类型化Java类。如果来回传递复杂类型,这可能是一个更好的选择

但是,如果您想继续使用示例代码,则需要填写已标识的变量。这些变量只是SOAP信封的典型参数。它们在WSDL中为您的服务定义,并且主要基于您为服务定义的名称空间。(它们在很大程度上独立于您的服务所在的实际URL,只有一个例外)。您可以在WCF服务协定中指定命名空间:

[ServiceContract(Namespace = "http://namespaces.deanblakely.com/wcf")]
请注意,名称空间URL不需要指向真正的资源,尽管它们经常指向。它甚至不需要是URL(我经常使用URN);它只需要是一个唯一的字符串。现在让我们假设您已将上述名称空间分配给您的服务

WSDL_TARGET_名称空间就是名称空间,与上面完全一样。操作名称是要调用的方法的名称,例如
SimpleTest
。SOAP_操作是名称空间和操作的组合;在您的情况下,这将是
http://namespaces.deanblakely.com/wcf/SimpleTest
。在您的WSDL中,您将在操作标记中看到这一点:

<wsdl:operation name="SimpleTest">
    <soap:operation soapAction="http://namespaces.deanblakely.com/wcf/SimpleTest" style="document"/>

SOAP_地址是唯一实际指向您的服务文件的地址,例如
http://www.deanblakely.com/Service2.svc

希望这能让你开始调用你的web服务;如果你不愿意,可以停下来寻求更多的帮助

编辑:错过了有关异步调用的部分


是的,该网页上描述的方法是同步的。默认情况下,WCF服务方法是同步的,在VisualStudio中生成服务引用时可以选择包含异步调用
wsimport
生成支持异步的代理,因此使用Android客户端generate也可以在这方面帮助您。

当从非Windows客户端与WCF服务通信时,您基本上将其视为XML Web服务。如果您将WCF服务配置为使用basicHttp绑定,就Java而言,它的行为将与任何其他web服务一样

通常,要从Java调用WCF服务,可以使用
wsimport
创建一组定制的代理和数据类,类似于服务引用的工作方式。Android没有这些类所需的所有库,但我确实找到了这个URL:

这是一个专门为Android开发的代理类生成器。您可能希望下载此代理生成器,而不是使用该网页上的代码;您只需将URL传递给服务的WSDL页面,它就会为所有内容创建类型化Java类。如果来回传递复杂类型,这可能是一个更好的选择

但是,如果您想继续使用示例代码,则需要填写已标识的变量。这些变量只是SOAP信封的典型参数。它们在WSDL中为您的服务定义,并且主要基于您为服务定义的名称空间。(它们在很大程度上独立于您的服务所在的实际URL,只有一个例外)。您可以在WCF服务协定中指定命名空间:

[ServiceContract(Namespace = "http://namespaces.deanblakely.com/wcf")]
请注意,名称空间URL不需要指向真正的资源,尽管它们经常指向。它甚至不需要是URL(我经常使用URN);它只需要是一个唯一的字符串。现在让我们假设您已将上述名称空间分配给您的服务

WSDL_TARGET_名称空间就是名称空间,与上面完全一样。操作名称是要调用的方法的名称,例如
SimpleTest
。SOAP_操作是名称空间和操作的组合;在您的情况下,这将是
http://namespaces.deanblakely.com/wcf/SimpleTest
。在你的脑海里