2012-06-11 3 views
1

이전에는 .svc 또는 .asmx URL에 서비스 참조를 추가하고 WCF 서비스 또는 ASMX 서비스를 호출 할 때 경험이 있었지만 너, 그리고 너는 그 방법들을 불러내는 데에 인텔리 센스가있다..NET에서 개발되지 않은 웹 서비스를 호출하는 방법

.net webservice가 아닌 경우에도 동일합니까?

은 내가 winrt 응용 프로그램에서 # 코드 C에서이 http://www.earthtools.org/webservices.htm

를 호출해야합니다,하지만 난 단지 그들이 SOAP 웹 서비스 인 경우

+0

아무 것도 시도해 보지 않으셨습니까? 프로젝트에 웹 서비스를 참조/추가하고이 URL을 가리키는 것처럼? SOAP은 여러 플랫폼에서 표준입니다. – Kangkan

답변

7

WSDL이있는 경우 해당 서비스에 대한 참조를 추가 할 수 있습니다. 하지만 여기서 REST 서비스를 호출하려고합니다. here에서

private const string BASE_URL = "http://www.earthtools.org/timezone"; 
private const string REQUEST_URL_FORMAT = "{0}/{1}/{2}"; 

public timezone GetTimeZone(double latitude, double longitude) 
{ 
    var uriString = String.Format(REQUEST_URL_FORMAT, BASE_URL, latitude, longitude); 
    var requestUri = new Uri(uriString); 

    var request = WebRequest.Create(requestUri); 
    using (var response = request.GetResponse()) 
    { 
     using (var responseStream = response.GetResponseStream()) 
     { 
      var ser = new XmlSerializer(typeof (timezone)); 
      var result = (timezone) ser.Deserialize(responseStream); 
      return result; 
     } 
    } 
} 

예 :

당신은 POST 요청을 전송하고 응답을 RAD해야합니다.

+0

+1 페이지를 읽고 SOAP가 아니라고 깨달았습니다. –

2

는, 당신은 여전히에 비주얼 스튜디오를 가리킬 수있는 방법을 잘 모릅니다. WSDL 끝점을 만들고 클라이언트 프록시를 생성합니다. 그러나 이것들은 REST 서비스 인 것처럼 보입니다. 가장 좋은 방법은 XDocument.Load 또는 somesuch를 사용하고 Linq-to-XML 또는 XML deserialization을 사용하여 XML을 C# 클래스로 변환하는 것입니다.

예를 들어 this service으로 전화를 걸고 싶다고 가정 해 보겠습니다. 위도/경도 결과를 얻는 쉬운 방법은 다음과 같습니다.

XDocument xdoc = XDocument.Load("http://www.earthtools.org/height/52.4822/-1.8946"); 
var lat = (decimal)xdoc.Element("location").Element("latitude"); 
var lng = (decimal)xdoc.Element("location").Element("longitude"); 
1

Microsoft 마케팅 담당자는 이기종 시스템에서도 웹 서비스가 상호 운용 될 수 있다고합니다.

반 진실입니다. 웹 서비스 표준은 실제로 다중 플랫폼입니다. 그러나 현장에서는 조금 더 복잡 할 수 있습니다. 다른 시스템의 다른 철학은 다른 행동으로 이어질 수 있습니다.

얼마 전, 내가 자바 웹 로직 구축 된 웹 서비스 쿼리에 추가 Visual Studio 2010에서 Visual Studio 2010와 (시스템의 확실하지를, 내가 클라이언트 측에서했다)은 약간의 고통이었다 이유는

  1. Visual Studio 프록시 마법사는 인라인 스키마 만 이해합니다. 여기 스키마는 <xsd:import>을 사용하여 wsdl 내에서 참조되었습니다. 비주얼 스튜디오는 그 것을 이해하지 못합니다
  2. 그런 다음 프록시로 명령 줄을 생성하기 위해 svcutil로 이동했습니다. WSDL 파일의 일부 오류 (이 파일은 서비스 공급자가 수동으로 작성했기 때문에)가 직접 작동하지 않았습니다. 서비스 공급자에게 wsdl 파일을 청소하도록 요청해야합니다.
  3. DTO를 나타내는 xsd 파일이 여러 웹 서비스에서 공유되었습니다. 따라서 모든 서비스에서 사용하지 않더라도 각 프록시에서 동일한 클래스가 중복됩니다. 부분 클래스로 조정하여 고유 한 클래스로 "재 포장"해야했습니다.

결론적으로 "상호 운용성"이라는 용어를 사용할 수 있습니다. 표준에 따르면 상호 운용이 가능하지만 현장에서는 항상 그런 것은 아닙니다.

나는 "휴식"서비스의 새로운 세상을 환영합니다. 이렇게하면 상호 운용성을 단순화 할 수 있습니다. 단점은 당신이 배관의 일부분을 건설해야 할 수도 있다는 것입니다.

좋은 소식은 귀하가 언급 한 서비스가이 휴식 철학을 받아 들인 것처럼 보입니다. 간단하지는 않지만이 서비스를 쿼리하기 위해 간단한 HTTP 요청 (게시, 가져 오기 또는 보내기)을 작성할 수 있습니다.

관련 문제