Microsoft MVP성태의 닷넷 이야기
WCF 질문드립니다. [링크 복사], [링크+제목 복사],
조회: 15958
글쓴 사람
이카루스 (iccaruss2 at hotmail.com)
홈페이지
첨부 파일
 

 WCF를 사용하여 SOAP 바디에 XML을 기술하여 메시지를 주고받고 있습니다..

 

원격 호출이 아닌 문서전송으로 모두 해결해야 합니다.

 

클라이언트가 전송을하고, 그에대한 응답메시지를 받게됩니다.

 

메시지를 보내서 재대로 메시지가 왔는지 출력을 해보았을때 메시지는 잘 오는걸 확인했습니다만.. SOAP 바디에 있는 XML을 파싱하는

 

방법을 모르겠군요.. 단기간내에 완벽히 이해를 못하고 오픈소스를 사용해서인지.. 잘 이해도 안가고 큰일입니다;;

 

일단 제가 짠 소스입니다.

 

 

 

 

[클라이언트]

 

 

    [ServiceContract]

    [XmlSerializerFormat]

    public interface IServiceDescription

    {

       [OperationContract(Action = "http://www.example.org/oceanwatch/ServiceDescriptionRequest", IsOneWay = true)]

        void ServDesc(ServDescReq request);

    }

 

    [MessageContract(IsWrapped=false)]

    public class ServDescReq

    {

        [MessageBodyMember]

        public ServDesc ServDesc;

        public ServDescReq() { }

        public ServDescReq(ServDesc report) { ServDesc = report; }

    }

 

    [XmlSchemaProvider(null, IsAny = true)]

    public class ServDesc : IXmlSerializable

    {

        string _namespace = "http://www.w3c.org/ssdl/ServiceDescriptionResponse";

 

        public ServDesc() { }

 

        public System.Xml.Schema.XmlSchema GetSchema()

        {

            return null;

        }

        public void ReadXml(XmlReader reader)

       {

            throw new Exception("The method or operation is not implemented.");

        }

        public void WriteXml(XmlWriter writer)

        {

            // SOAP 바디에 들어갈 XML, 상황에 따라서 더 복잡한 문서가 들어갈 수도 있습니다.

            writer.WriteStartElement("ssdl", "SSDL", _namespace);

            writer.WriteStartElement("Request", _namespace);

            writer.WriteStartElement("ssdl", "RequestDescription", _namespace);

            writer.WriteEndElement();

            writer.WriteEndElement();

        }

    }

 

위의 소스로 메시지를 생성하구요...

 

          using (ChannelFactory<IServiceDescription> channelNotification = new ChannelFactory<IServiceDescription>("Connect"))

            {

                channelNotification.Open();

                IServiceDescription manager = channelNotification.CreateChannel();

                ServDescReq request = new ServDescReq(new ServDesc());

 

                Console.ForegroundColor = ConsoleColor.Cyan;

                Console.WriteLine("EventSource에 보낼 ServiceDescription 요청(XML 문서)은 다음과 같습니다.");

                Console.ForegroundColor = ConsoleColor.White;

                Util.ShowMe(request);

                Console.ForegroundColor = ConsoleColor.Cyan;

                Console.WriteLine();

                Console.WriteLine();

                Console.WriteLine("EventSource에 보낼 ServiceDescription 요청(SOAP 문서)은 다음과 같습니다.");

                manager.ServDesc(request);

                Console.ResetColor();

                channelNotification.Close();

            }

위와 같이 서버에 메시지를 전송합니다.

 

 

 

 

 

 

 

 

 

[서버]

 

 

    [ServiceContract]

    [XmlSerializerFormat]

    public interface IServiceDescriptionRequest

    {

        [OperationContract(Action = "http://www.example.org/oceanwatch/ServiceDescriptionRequest", IsOneWay = true)]

        void ServDesc2(Message request);

    }

    public class ServiceDescriptionRequest : IServiceDescriptionRequest

    {

        public void ServDesc2(Message request)

        {

            Console.ForegroundColor = ConsoleColor.Cyan;

            Console.WriteLine("Subscriber에서 보낸 서비스 기술 요청(XML 원문)은 다음과 같습니다.");

            Console.ForegroundColor = ConsoleColor.White;

            Console.WriteLine(request);

            Console.WriteLine();

            Console.ForegroundColor = ConsoleColor.Cyan;

            Console.WriteLine("ServiceDescriptionResponse를 보냅니다. - Press any key to continue");

            Console.ResetColor();

        }

    }

위는 클라이언트의 메시지를 받는 인터페이스 이고요..

 

 

 

                using (ServiceHost serviceHost = new ServiceHost(typeof(ServiceDescriptionRequest)))

                {

                    Console.ForegroundColor = ConsoleColor.Cyan;

                    Console.WriteLine("Waiting Connect...");

                    Console.ResetColor();

                    serviceHost.Open();

                    Console.ReadLine();

                    serviceHost.Close();

                }

 

다음과 같이 호스트를 생성해서 클라이언트의 메시지를 받습니다.

 

 

일단 위 소스로 전송된 메시지를 찍어보면 보낸되로 출력되는것으로보아 작동은 잘 하고있는거 같은대요..

받은 Message 를 어떻게해야 파싱할 수 있는지요...








[최초 등록일: ]
[최종 수정일: 10/10/2007]


비밀번호

댓글 작성자
 




... 61  62  63  64  65  66  67  68  [69]  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
852임동찬1/6/201015252base.OnStart(agrs) [1]
851한귀순1/6/201020729oracle & transaction 질문 [5]
850박한주12/31/200917907COM과 C#간 권한 문제에 관해 여쭤봅니다. [5]
848날쌘돌이12/22/200918794C#으로 개발하는 ActiveX 디버깅 문제 [5]
847최승문12/16/200917652winform에서 웹서비스를 이용할때, 객체가 전송안되는 문제... [2]
846이강구12/14/200916614ATL COM 제작 문의 [3]
845김재영12/9/200919456ClickOnce에서 WinForm을 배포시 변동되는 Args값을 넘길 수 있나요? [3]파일 다운로드1
843김재영12/2/200916980Hyper-V 사용에 대해여 질문이 있습니다. [2]
842한귀순12/1/200919823Attempted to read or write protected memory [2]
841장근배11/30/200921420첨부 파일 Download시 한글 Name [2]
844장근배12/3/200915984    답변글 [답변]: 첨부 파일 Download시 한글 Name파일 다운로드1
840박영민11/20/200915800웹 애플리케이션 질문입니다. [1]
837left...10/21/200916666아래 게시글 관련하여 추가 질문 [3]
836left...10/19/200917682ActiveX 상에서 암시적 dll 로드 [1]
832김우진10/15/200914359C# 에서 swa + security 구현 방법이 없을까요?
833정성태10/15/200918434    답변글 [답변]: C#에서 swa + security 구현 방법이 없을까요? [1]
834김우진10/15/200914450        답변글 예제 메시지 올려드릴께요. [2]파일 다운로드1
838이영우10/30/200914383            답변글 국세청 전자세금계선서에 관하여 문의드립니다.
831채승수10/13/200916669스마트 클라이언트 GAC 등록 문제 여쭤봅니다... [2]
829박찬용10/9/200929160WebBrowser 컨트롤 사용시 새창을 띄울시 세션/쿠키 공유가 왜 안될까요?? [1]파일 다운로드1
827송창훈9/24/200914191[질문]CAS 설정
828정성태9/28/200917532    답변글 [답변]: [질문]CAS 설정 [1]
825김재영9/18/200915122프레임워크별 비트 지원에 대해서 문의를 드립니다. [2]
821채승수8/27/200914570클릭원스를 비스타에서 실행시 [1]
822채승수8/28/200919465    답변글 [답변]: 클릭원스를 비스타에서 실행시 [2]
818개발돌이8/14/200917094ActiveX개발한 dll을 임베디드 할때 UI에 대한 질문 [1]파일 다운로드1
... 61  62  63  64  65  66  67  68  [69]  70  71  72  73  74  75  ...