2012-03-19 4 views
1

나는 많은 메소드를 가진 .NET WCF 서비스 (웹 서비스 아님)를 가지고 있으며, 일부는 복잡한 데이터 타입을 받고 리턴한다. 내 Windows Phone 7 응용 프로그램에서이 서비스를 사용합니다. 모든 것이 훌륭하고 쉽습니다.안드로이드에서 .NET WCF 서비스에 액세스하기

이제 일부 앱을 Android로 이식 할 수있는 가능성을 평가하고 있지만 Android 클라이언트에서 내 WCF 서비스를 호출하는 방법을 알아낼 수 없습니다.

나는 작동 예제를 찾았습니다. Invoke webservices from Android입니다.

그러나 이것은 WCF 서비스가 아닌 "웹 서비스"에 액세스하는 것으로 보입니다.

내 서비스는 http://www.deanblakely.com/Service2.svc이며 "Alive"라는 문자열을 반환하는 "SimpleTest"라는 간단한 메서드가 있습니다.

링크 된 기사의 코드를 사용하여 http://www.deanblakely.com/Service2.svc을 SOAP_ADDRESS에, SimpleTest를 OPERATION_NAME에 넣었습니다. 그러나 SOAP_ACTION과 WSDL_TARGET_NAMESPACE에 무엇을 넣을지 전혀 모른다. 이 접근법이 유효한지 모르겠다.

.NET에서 Visual Studio는 "서비스 참조"를 구축하고 모든 것이 제대로 작동합니다. WCF 서비스와

나는 또한 다음 두 줄의 코드를 이해하지 ...

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

는 통화 그래서 우리는 SimpleTestAsync에 대한 호출을하고 비동기 반환 콜백을 남겨 비동기입니다. 이 두 줄의 코드는 동기식으로 표시됩니다.

답변

4

Windows가 아닌 클라이언트에서 WCF 서비스와 통신 할 때 기본적으로이를 XML 웹 서비스로 처리합니다. basicHttp 바인딩을 사용하도록 WCF 서비스를 구성하면 Java와 관련하여 다른 웹 서비스와 마찬가지로 작동합니다.

일반적으로 Java에서 WCF 서비스를 호출하려면 wsimport을 사용하여 서비스 참조가 작동하는 방식과 비슷하게 프록시 및 데이터 클래스의 사용자 지정 집합을 만듭니다. 안드로이드는 해당 클래스에 필요한 모든 라이브러리가 없지만 다음 URL을 찾았습니다.
http://code.google.com/p/androidclientgenerator-wsimport/ 이것은 안드로이드 전용 프록시 클래스 생성기입니다. 해당 웹 페이지에서 코드를 사용하는 대신이 프록시 생성기를 다운로드 할 수 있습니다. 서비스의 WSDL 페이지에 URL을 전달하면 모든 유형의 Java 클래스가 작성됩니다. 복잡한 유형이 앞뒤로 전달되는 경우이 방법이 훨씬 더 좋습니다.

그러나 샘플 코드를 계속하려면 식별 한 변수를 채워야합니다. 변수는 SOAP 봉투의 일반 매개 변수 일뿐입니다. 이는 서비스 용 WSDL에 정의되어 있으며 주로 서비스에 대해 정의한 네임 스페이스를 기반으로합니다. (서비스는 한 가지 예외를 제외하고는 실제 URL과 크게 독립적입니다. 당신은 WCF 서비스 계약의 네임 스페이스를 지정 : 네임 스페이스 URL은 실제 자원을 가리 키도록하지 필요을한다는 것을

[ServiceContract(Namespace = "http://namespaces.deanblakely.com/wcf")] 

참고, 자주 그들이 비록. 그것은 URL 일 필요조차 없다 (나는 항아리를 자주 사용한다). 그것은 단지 고유 한 문자열이어야합니다. 지금은 위 네임 스페이스를 서비스에 할당했다고 가정합니다.

WSDL_TARGET_NAMESPACE는 위와 똑같은 이름 공간 일뿐입니다. OPERATION_NAME은 호출하려는 메소드의 이름입니다 (예 : SimpleTest). SOAP_ACTION은 네임 스페이스와 연산의 조합입니다. 귀하의 경우에는 http://namespaces.deanblakely.com/wcf/SimpleTest이됩니다.

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

SOAP_ADDRESS 실제로 서비스 파일, 예를 들어 가리키는 하나입니다 : 당신의 WSDL에서 당신은이 작업 태그에 설명 볼 것 http://www.deanblakely.com/Service2.svc.

웹 서비스에 전화를 걸 수 있기를 바랍니다. 안주하지 않으시면 다시 멈추고 더 많은 도움을 받으십시오.

편집 : 비동기 호출에 관한 부분을 놓쳤습니다.

예, 해당 웹 페이지에 설명 된 방법은 동기식입니다. WCF 서비스 메서드는 기본적으로 동기식이며 Visual Studio에서 서비스 참조를 생성 할 때 비동기 호출을 포함하는 옵션이 있습니다. wsimport은 async-ready 프록시를 생성하므로 Android 클라이언트 generate를 사용하면이 영역에서 도움이 될 수도 있습니다.

관련 문제