일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Maven
- javascript
- 이클립스
- decompiler
- Eclipse
- 컬럼명
- 자바스크립트
- 안드로이드
- html
- MANTIS
- WebView
- SpringSource Tool Suite
- Java
- MSsql
- TextBox
- C#
- varags
- Bootstrap
- scrollView
- 자바
- jsp
- 웹 서비스
- MS-SQL
- Android
- 웹뷰
- STS
- Redirect
- Apache Lucene
- Web Service
- asp.net
- Today
- Total
bboks.net™
C# 사용자 정의 클래스를 이용한 웹 서비스 구현 본문
웹 서비스를 구현하다 보면 사용자 정의 클래스를 이용해 웹 서비스 통신해야 하는 경우 또는 하고 싶은(?) 경우가 있다. 이 경우에는 한가지만 제외하면 굉장히 간단하다.
사용자 정의 클래스를 이용한 웹 서비스 구현 과정은 다음과 같다.
1. 웹 서비스 통신에서 사용할 사용자의 정의 클래스 구현
2. 웹 서비스에 사용자 정의 클래스 참조 추가
3. 사용자 정의 클래스를 이용하는 웹 서비스 메소드 구현
4. 웹 서비스 호출 측에서 통신에서 사용할 사용자 정의 클래스 참조 추가
5. 웹 서비스 호출 측에 웹 서비스 참조 추가
6. 웹 서비스 참조 수정
1. 웹 서비스 통신서 사용할 사용자 정의 클래스 구현
아래와 같이 클래스 라이브러리 형태의 프로젝트를 생성하고 사용자 정의 클래스를 구현한다.
namespace UserLibrary { public class User { private string userName; private string userPassword; public User() { } public User(string userName, string userPassword) { this.userName = userName; this.userPassword = userPassword; } public string UserName { get { return userName; } set { userName = value; } } public string UserPassword { get { return userPassword; } set { userPassword = value; } } } }
2. 웹 서비스에 사용자 정의 클래스 참조 추가
새로운 프로젝트를 웹 서비스 형태로 생성하고 프로젝트에 사용자 정의 클래스가 구현된 프로젝트를 참조로 추가한다.
3. 사용자 정의 클래스를 이용하는 웹 서비스 메소드 구현
아래와 같이 사용자 정의 클래스를 이용하는 메소드를 구현한다.
[WebMethod] public User GetNewUser(User user) { user.UserName = "New " + user.UserName; user.UserPassword = "New " + user.UserPassword; return user; }
4. 웹 서비스 호출 측에서 통신에서 사용할 사용자 정의 클래스 참조 추가
웹 서비스를 호출하는 쪽에서도 동일한 사용자 정의 클래스를 가져와서 참조로 추가를 한다.
5. 웹 서비스 호출 측에 웹 서비스 참조 추가
프로젝트 선택 → 서비스 참조 추가 → 팝업창에서 좌측 아래 [고급] → 좌측 아래 [웹 참조 추가]글 선택하면 아래와 같은 화면이 뜨고 URL을 입력하고 이동을 클릭하면 호출할 수 있는 웹 서비스가 뜬다. 여기에서 [참조 추가]를 하면 정상적으로 웹 서비스가 등록된다.
6. 웹 서비스 참조 수정
자~ 그럼 웹 서비스 메소드를 호출해보자. 아래와 같이 웹 서비스를 호출하는 측에서 사용자 정의 객체를 이용해서 웹 서비스를 호출해보자.
static void Main(string[] args) { localhost.Service1 ws = new WebServiceCaller.localhost.Service1(); UserLibrary.User user = new UserLibrary.User("test user", "test password"); Console.WriteLine("웹 서비스 호출 전"); Console.WriteLine(user.UserName); Console.WriteLine(user.UserPassword); UserLibrary.User newUser = ws.GetNewUser(user); Console.WriteLine("웹 서비스 호출 후"); Console.WriteLine(newUser.UserName); Console.WriteLine(newUser.UserPassword); Console.ReadLine(); }
으잉?? 잘못된 인수가 있다는 오류와 변환할 수 없다는 오류가 뜬다.. 제대로 작성했는데..;;;
이유인 즉슨 웹 서비스 참조를 추가하면서 사용자 정의 클래스를 웹 서비스에서 제공하는 클래스로 다시 정의해버린 것이다.
툴바의 [프로젝트] → [모든 파일 표시]를 선택 후 솔류션 탐색기에서 웹 서비스의 Refence.map의 Refecence.cs 파일을 열어보자. 아래와 같이 사용자 정의 클래스가 재정의된 것을 볼 수 있다.
해결책: 재정의된 클래스 부분을 삭제하고(/// <remarks/> 부분부터 삭제해야 됨) 파일 맨위 using문에 우리가 정의한 클래스를 적어주자. 그럼 오류가 없어질 것이다.
namespace WebServiceCaller.localhost { using System.Diagnostics; using System.Web.Services; using System.ComponentModel; using System.Web.Services.Protocols; using System; using System.Xml.Serialization; using UserLibrary;
결과: 짜란~ 정상적으로 웹 서비스가 호출된 것을 볼 수 있다.
주의할 점: 웹 서비스를 호출하기 전에 반드시 웹 서비스를 구동 시켜야 한다.
[참조] How to Return a User Defined Object from Webservice