2012-11-01 4 views
4

SOAP 메시지에서 매개 변수로 복합 형 보내기다음과 같이 내가 WCF 서비스를

[DataContract] 
public class Person 
{ 
    [DataMember] 
    public int Age { get; set; } 

    [DataMember] 
    public string Name { get; set; } 
} 

그리고 그 같은 서비스를 호출하고 있습니다 :

BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None); 
     IChannelFactory<IRequestChannel> factory = binding.BuildChannelFactory<IRequestChannel>(new BindingParameterCollection()); 
     factory.Open(); 

     EndpointAddress address = new EndpointAddress(url); 
     IRequestChannel irc = factory.CreateChannel(address); 
     using (irc as IDisposable) 
     { 
      irc.Open(); 
      string soapMessage = "<GetData><person><Age>24</Age><Name>John</Name></person></GetData>"; 

      XmlReader reader = XmlReader.Create(new StringReader(soapMessage)); 
      Message m = Message.CreateMessage(MessageVersion.Soap11,"http://tempuri.org/IService1/GetData", reader); 

      Message ret = irc.Request(m); 
      reader.Close(); 
      return ret.ToString(); 
     } 

Person과 같은 복잡한 형식을 GetData 메서드의 매개 변수로 보내려고하면 person 개체가 null이됩니다. 하지만 매개 변수로 정수, 문자열 등 알려진 된 형식을 보낼 때 나는 아무런 문제가 없습니다.

복잡한 형식을 매개 변수로 서비스 메서드에 보내려면 어떻게해야합니까?

+0

Person의 코드는 무엇입니까? [DataContact]로 표시되어 있습니까? http://msdn.microsoft.com/en-us/library/ms733127.aspx – ErnieL

+0

예, 또한 Person 클래스로 내 질문을 업데이트했습니다. –

+0

왜 서비스 참조 만 사용하지 않습니까? –

답변

1

나는 비슷한 상황으로 달리고, 우리는 동등한로 서비스의 인터페이스를 변경 결국 :

public string GetData(string person) 

그리고 우리는 웹 서비스를 호출하기 전에 우리 자신의 객체 직렬화를했다. 웹 서비스 메서드 내에서 즉시 deserialize하고 정상적으로 처리합니다.

+0

안녕하세요 앤드류, 좋은 해결책이긴하지만 우리의 풍토에는 적합하지 않습니다. 웹 서비스는 다른 회사에서 제공하기 때문에 매개 변수를 역 직렬화 할 기회가 없습니다. –

관련 문제