웹서비스와 소켓통신(클라이언트 비교)
웹서비스 방식의 호출
ex> WebServiceName.WebMethodName(Parameter1)
웹참조 파일에 설정되어 있는 웹서비스 정보(자동으로 생성)
public WebServiceName() {
this.Url = "http://111.111.111.111:0000/WebServiceName.asmx";
}
<= 호출하려는 웹서비스 주소와 포트번호와 웹서비스명 정보
웹참조 파일에 설정되어 있는 웹메소드 정보(자동으로 생성)
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://111.111.111.111:0000/WebMethodName", RequestNamespace="http://111.111.111.111:0000/", ResponseNamespace="http://111.111.111.111:0000/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
<= 호출하려는 웹메소드의 웹서비스 정보와 Request/Response를 주고 받을 웹주소와 포트 정보
public type WebMethodName(type Parameter1) {
object[] results = this.Invoke("WebMethodName", new object[] {
Parameter1});
return ((type)(results[0]));
}
<= 호출하려는 웹 메소드의 형식(매개변수의 타입과 갯수, 리턴값의 타입 지정)
소켓통신 방식의 호출
: 바이트 스트림기반의 호출이므로 데이터를 전송하기 위해 주고 받는 데이터의 크기를 정의.
byte[] Parameter = new byte[1024];
: 전송하는 Parameter의 크기를 코드에서 정의
byte[] returnValue = new byte[1024];
: 리턴받는 리턴값을 받을의 크기를 코드에서 정의
IPAddress ipaddr = IPAddress.Parse("111.111.111.111");
: Socket에 설정할 서버주소 코드에서 정의
IPEndPoint endpoint = new IPEndPoint(ipaddr,:0000);
: Socket에 설정할 포트번호 코드에서 정의
csocket = new Socket(AddressFamily.InterNetwork ,SocketType.Stream , ProtocolType.Tcp);
: 서버주소의 형식, 전송의 형태, 프로토콜을 정의
csocket.Connect(endpoint);
: 지정한 서버주소로 연결
if (csocket.Connected)
: 연결 성공시
{
try
{
sData = System.Text.Encoding.UTF8.GetBytes(msg);
: 바이트 데이터를 인코딩(서버, 클라이언트 인코딩방식을 같게 설정하여야 함)
csocket.Send(Parameter);
: 데이터 전송
int rtnMsgLen = csocket.Receive(returnValue);
: 소켓에 저장된 리턴값을 수신
rtnMsg = Encoding.Default.GetString(returnValue);
: 바이터 데이터인 리턴값을 디코딩
}
catch (Exception e)
{
inputStr = e.ToString(); ;
}
finally
{
csocket.Close();
: 컨넥션 종료
}
}
else
{
rtnMsg = "N";
}
return rtnMsg;