일반적으로 상태 인 (엔티티)을 직렬화하며 WSDL 서비스 래퍼는 직렬화하지 않습니다. WSDL에 생성 된 유형의 다른 절반
namespace MyNamespace
{
[Serializable] partial class Customer {}
[Serializable] partial class Order {}
[Serializable] partial class Address {}
}
이것은 결합 : 당신이 속성 같은 것들을 추가하는 두 번째 코드 파일을 추가 할 수 있음을 의미 대부분의 코드 세대 2.0 partial
클래스로 파일을 기록하기 때문에, 그리고 BinaryFormatter
에서 사용할 수 있도록해야합니다. 그러나 개인으로 나는 그것이 나쁜 방법이라고 생각합니다. wsdl.exe를 사용하고 있기 때문에 유형은 이미 XmlSerializer
을 통해 직렬화 가능합니다. BinaryFormatter
(기본적으로 사용되며 매우 취약한 것)으로 serialize하는 대신 XmlSerializer
을 통해 string
또는 byte[]
으로 serialize하고 인을 세션 상태에 추가하는 것이 좋습니다. 이것은 여분의 코드 변경없이 작동 할 것이고, BinaryFormatter
의 여러 취성 포인트를 피할 수 있기 때문에 더 강력합니다. 예를 들어
:
static string SerializeXml<T>(T obj) where T : class
{
if (obj == null) return null;
StringWriter sw = new StringWriter();
using (XmlWriter xw = XmlWriter.Create(sw))
{
new XmlSerializer(typeof(T))
.Serialize(xw, obj);
}
return sw.ToString();
}
static T DeserializeXml<T>(string xml) where T : class
{
if (xml == null) return null;
using (XmlReader xr = XmlReader.Create(new StringReader(xml)))
{
return (T)new XmlSerializer(typeof(T))
.Deserialize(xr);
}
}
왜 응용 프로그램 프록시 인스턴스 자체를 직렬화 할 필요합니까? 이것은 웹 서비스 프록시이기 때문에; 그것은 단순히 데이터를 트랜잭션으로 반환하고 일부 데이터 구조를 채우는 메소드를 갖고 있지 않습니까? 데이터 구조가 실제로 직렬화하려는 것입니까? – gn22
@Aros, 나는 Gurdas와 같은 질문을 가지고있다. 프록시 객체 자체 나 그것이 운반하는 데이터를 직렬화하려고합니까? –