gpt4 book ai didi

java - 通过 Android 客户端连接到 WCF 服务

转载 作者:太空狗 更新时间:2023-10-29 16:08:54 26 4
gpt4 key购买 nike

我有一个非常简单的 Hello World WCF 服务,如下所示:

namespace MyWCFServices
{
public class HelloWorldService : IHelloWorldService
{

public String GetMessage()
{
return "Hello world";
}
}
}

namespace MyWCFServices
{
[ServiceContract(Namespace = "http://127.0.0.1:49359/GetMessage/")]
public interface IHelloWorldService
{
[OperationContract]
String GetMessage();
}
}

我的 web.config:

<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="false" targetFramework="4.0" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceTypeBehaviors">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="MyWCFServices.HelloWorldService"
behaviorConfiguration="MyServiceTypeBehaviors">

<host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:49359/HostDevServer/HelloWorldService.svc" />
</baseAddresses>
</host>

<endpoint name="GetMessage" address="" binding="basicHttpBinding"
contract="MyWCFServices.IHelloWorldService"/>
<endpoint contract="IMetadataExchange"
binding="mexHttpBinding" address="mex"/>
</service>
</services>
</system.serviceModel>
</configuration>

还有我的安卓java:

HttpClient httpClient = new DefaultHttpClient(); 

String url = "http://10.0.2.2:49359/HostDevServer/HelloWorldService.svc/GetMessage";
//String url = "http://10.0.2.2:49359/HostDevServer/HelloWorldService.svc/GetMessage";
//String url = "http://localhost:49359/HostDevServer/HelloWorldService.svc";
//String url = "http://localhost:49359/GetMessage";
try{

HttpGet method = new HttpGet( new URI(url) );
HttpResponse response = httpClient.execute(method);
if ( response != null )
{
Log.i( "login", "received " + getResponse(response.getEntity()) );
}
else
{
Log.i( "login", "got a null response" );
}

我收到 java.net.SocketException:权限被拒绝。我已经有:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

所以或者我的 WS 不接受连接或者 android 客户端以错误的方式连接。可能两者都有。对于那些知道的人,在 Android 客户端中它需要放置 10.0.2.2 以重定向到本地主机 Web 服务器,所以那里没有问题(至少在本地连接到 PHP KSOAP WS 时它可以工作)

有人可以指导我吗?

最佳答案

那是完全错误的。看来您不了解 Web 服务的基础知识。您正在公开 SOAP 服务 (basicHttpBinding) - 它期望 HTTP POST 请求和通信必须遵循 SOAP 1.1 协议(protocol)。但是您称它为 HTTP GET = no SOAP body。此外,您的 ServicContract 中的命名空间与实际服务的 URL 无关。

要调用该服务,您必须构建有效的 SOAP 请求并将其发布。最好在 Android 上使用一些 SOAP 协议(protocol)栈 - 例如 kSoap2 .

Here是使用 kSoap2 调用 WCF 服务的示例。

关于java - 通过 Android 客户端连接到 WCF 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7686659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com