2013-01-02 4 views
0

팀 A가 WebServiceA를 만듭니다. Person 유형을 사용합니다. 사람이 WebServiceA의 호출로 등록되면 다른 시스템에도 (등록 된 사람을 통과 한 팀 B가 만든 WebServiceB에 대한 호출로) 통지해야합니다.웹 서비스간에 유형을 공유하는 방법

그런 다음 시스템 B에서 사람을 편집하면 수정 된 사람을 전달하는 WebServiceA에 대한 호출을 통해 시스템 A로 수정 사항을 마이그레이션해야합니다.

두 웹 서비스가 같은 유형을 사용하도록 만드는 방법은 무엇입니까? xml을 문자열로 보낸 다음 각 WebService의 객체에 serialize/deserialize하여 xml에 대해 작업 할 필요가 없도록 할 수 있지만 더 쉬운 방법은 궁금합니다.

나는 이것을하고 싶은 : 대신

WebServiceA 
Webmethod - RegisterPerson(Person person) 
    calls WebServiceB.PersonRegistered(person.SerializeToXml()) 
WebMethod - PersonModified(string person) - deserialize to WebServiceA.Person 

WebSericeB 
WebMethod - PersonRegistered(string person) - deserialize to WebServiceB.Person 
WebMethod - ModifyPerson(Person person) 
    calls WebServiceA.PersonModified(person.SerializeToXml()) 

WebServiceA 
Webmethod - RegisterPerson(Person person) 
    calls WebServiceB.PersonRegistered(person) 
WebMethod - PersonModified(Person person) 

WebSericeB 
WebMethod - PersonRegistered(Person person) 
WebMethod - ModifyPerson(Person person) 
    calls WebServiceA.PersonModified(person) 

을 우리는 A 팀에서 ASP.NET WebService에를 사용하고 B 팀이 자바를 사용하고 있습니다. 두 팀 모두 .NET을 사용 중이면 아무 것도 변경되지 않습니까?

답변

1

두 팀이 .NET을 사용 중이라면 하나의 클래스 라이브러리 프로젝트에서 데이터 개체를 정의 할 수 있으며 두 팀이 동일한 라이브러리 (DLL)를 공유합니다. .NET 프로젝트에서 서비스에 대한 참조를 만들 때 Windows Communication Foundation이 백그라운드에서 수행하는 작업과 거의 같습니다. 따라서 첫 번째 예제 에서처럼 매개 변수로 객체를 전달하는 것이 간단합니다.

두 가지 언어가 있으므로 분명히 공통점이 있으며 여기에는 json 또는 xml이 들어갑니다 (두 번째 예). 문자열을 캡처하고 객체를 반환하고 메서드에 매개 변수로 전달하는 일종의 변환기 클래스를 추가 할 수 있습니다. 구현은 사용하고있는 프레임 워크에 따라 다릅니다 (스프링은이를 쉽게 만듭니다)

+0

그리고 우리가 wcf 서비스가 아닌 웹 서비스 사용? .NET으로 작성된 두 웹 서비스간에 객체를 공유 할 수있는 방법이 있습니까? 나는 당신이 당신의 대답에 약간의 실수를했다고 생각합니다. 첫 번째 예제에서는 두 번째가 아닌 객체를 전달합니다. 두 번째로 나는 현을 건네 준다. –

+0

@Peri "웹 참조"를 사용하여 프록시 클래스를 만들 수 있습니다. http://msdn.microsoft.com/en-us/library/d9w023sx(v=vs.90).aspx를 참조하십시오. WCF가 웹 서비스에 권장되는 방법이라고 생각합니다. (필자는 예제에 대한 참조를 수정했습니다.) – Ulises

+0

예 프록시 클래스를 만들 수 있다는 것을 알고 있습니다.하지만 웹 참조를 추가하면 WebServiceB가이 클래스 라이브러리의 WebServiceA 유형과 동일한 클래스 라이브러리를 참조하더라도 프록시와 함께 재생성되고 다른 네임 스페이스에 있습니다. 따라서 WebServiceB에 WebServiceA에 PersonRegistered (ClassLibrary.Person person) 메소드가 있으면 PersonRegistered (WebService2.Person person)로 표시됩니다. –

관련 문제