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]