IIS에선 기본적으로 http Binding만 제공한다.
결론만 말하자면 웹어플리케이션에서 self-hosting을 코드(global.asax같은곳에서 ServiceHost를 직접 실행해야함)에서 띄우지 않고서는 netTcpBinding나 netNamedPipeBinding 같은건 IIS에서 지원하지 않는다.
다른 꼼수가 있을지도 모르지만 일단 여기까지...
암시적 계약(DataContract, DataMember등의 선언 없이 객체 사용하기)은 .NET 3.5 SP1에서부터 지원한다.
이건 길버라이트님 블로그에서 발견한 글... 몰랐으면 삽질 할 뻔했다..
전송데이터는 get, set이 되는 public멤버만 전송된다.
internal, private, protected, readonly, get만 구현된 property 다 안된다. 오직 public변수나 get set이 둘 다 구현된 public property만 된다. 이건 Binary를 전송하는 netTcpBinding이나 netNamePipeBinding일 때만 적용되는것일수도 있는데.. 아마도 deserializing후에 객체를 생성하려면 public만 가능하니까 그런것 같다.
특정 데이터를 전송할때 별다른 에러 없이 Service Fault 예외가 발생했다면 직렬화 혹은 역직렬화 문제일 가능성이 크다.
이건 진짜 경험 없으면 알기 힘들다.. 다른 데이터 전송에선 송수신 잘 되는데.. 특정 데이터 송수신에서 그냥 Service Fault에러가 발생한다.. web.config의 includeExceptionDetailInFaults="true"로 해도 똑같은 예외만 보여준다. 이건 MSDN포럼에 가보면 대부분 serializing이나 deserializing을 확인해보라고 조언한다. 그 이유는 보통 상속클래스들을 knownType에 등록을 안해줬기 때문이다. 예를들면 WCF함수에서 object를 반환해주는 함수를 만들었다면... 선언은 object로 했지만 실제로 오고가는 데이터는 뭐가될지 아무도 모른다.. 고로 web.config의 system.runtime.serialization의 knownType에다가 실제로 오고가는 데이터 타입을 선언해주면 된다.
(닷넷의 기본 객체들은 선언없이 모두 직렬/역직렬화 되므로 사용자정의 클래스만 선언해주면 된다.)
자세한 설명과 샘플은 다음에 시간날 때 정리....
결론만 말하자면 웹어플리케이션에서 self-hosting을 코드(global.asax같은곳에서 ServiceHost를 직접 실행해야함)에서 띄우지 않고서는 netTcpBinding나 netNamedPipeBinding 같은건 IIS에서 지원하지 않는다.
다른 꼼수가 있을지도 모르지만 일단 여기까지...
암시적 계약(DataContract, DataMember등의 선언 없이 객체 사용하기)은 .NET 3.5 SP1에서부터 지원한다.
이건 길버라이트님 블로그에서 발견한 글... 몰랐으면 삽질 할 뻔했다..
전송데이터는 get, set이 되는 public멤버만 전송된다.
internal, private, protected, readonly, get만 구현된 property 다 안된다. 오직 public변수나 get set이 둘 다 구현된 public property만 된다. 이건 Binary를 전송하는 netTcpBinding이나 netNamePipeBinding일 때만 적용되는것일수도 있는데.. 아마도 deserializing후에 객체를 생성하려면 public만 가능하니까 그런것 같다.
특정 데이터를 전송할때 별다른 에러 없이 Service Fault 예외가 발생했다면 직렬화 혹은 역직렬화 문제일 가능성이 크다.
이건 진짜 경험 없으면 알기 힘들다.. 다른 데이터 전송에선 송수신 잘 되는데.. 특정 데이터 송수신에서 그냥 Service Fault에러가 발생한다.. web.config의 includeExceptionDetailInFaults="true"로 해도 똑같은 예외만 보여준다. 이건 MSDN포럼에 가보면 대부분 serializing이나 deserializing을 확인해보라고 조언한다. 그 이유는 보통 상속클래스들을 knownType에 등록을 안해줬기 때문이다. 예를들면 WCF함수에서 object를 반환해주는 함수를 만들었다면... 선언은 object로 했지만 실제로 오고가는 데이터는 뭐가될지 아무도 모른다.. 고로 web.config의 system.runtime.serialization의 knownType에다가 실제로 오고가는 데이터 타입을 선언해주면 된다.
(닷넷의 기본 객체들은 선언없이 모두 직렬/역직렬화 되므로 사용자정의 클래스만 선언해주면 된다.)
자세한 설명과 샘플은 다음에 시간날 때 정리....
'┣ programming' 카테고리의 다른 글
| [WCF] WCF에 관현 몇가지 불편한(?) 진실 (0) | 2012/03/14 |
|---|---|
| 웹채팅 구현시 Long-Polling 방식과 Polling방식 선택하기 (1) | 2011/12/08 |
| [AS3] for (each)구문에서의 변수 scope (0) | 2011/04/07 |
| Open DBDiff - 디비 스키마를 비교해보자. (0) | 2011/01/20 |
| [C#] Connection Timeout 과 Command Timeout (2) | 2010/02/19 |
| [C#] 스레드 동기화를 위한 AutoResetEvent와 ManualResetEvent (2) | 2010/01/10 |
TAG WCF



