주어진 클라이언트에 대해 WCF 서비스를 구현해야하므로 네임 스페이스와 계약이 정의되지 않았습니다. 문제는 복합 유형을 MessageBodyMember
으로 사용할 때 서버 측에서 주어진 멤버가 내 서버 측에서 null로 설정된다는 것입니다.WCF 복잡한 유형 및 네임 스페이스가있는 MessageBodyMember
<?xml version="1.0" encoding="utf-8" ?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header>
<ns1:CustomeHeader xmlns:ns1="HEADER_NAMESPACE">
<version>1.0</version>
</ns1:CustomeHeader>
</soapenv:Header>
<soapenv:Body>
<ns2:in4 xmlns:ns2="NAMESPACE_1">
<ns39:userID xmlns:ns39="NAMESPACE_2">
<ns40:ID xmlns:ns40="NAMESPACE_3">someFakeID_123</ns40:ID>
<ns41:type xmlns:ns41="NAMESPACE_3">0</ns41:type>
</ns39:userID>
</ns2:in4>
</soapenv:Body>
</soapenv:Envelope>
당신이 볼 수 있듯이, userID
는 회원이 네임 스페이스를 정의하는 복합 형식은 다음과 같습니다 여기
[XmlSerializerFormat]
public interface IIntegrationService
{
[OperationContract]
[XmlSerializerFormat]
SyncOrderRelationshipRsp syncOrderRelationship(SyncOrderRelationshipReq syncOrderRelationshipReq);
}
[ServiceContract]
public class IntegrationService : IIntegrationService
{
public SyncOrderRelationshipRsp syncOrderRelationship(SyncOrderRelationshipReq syncOrderRelationshipReq)
{
//some code here ...
}
}
그리고 여기 SyncOrderRelationshipReq
의 정의와 UserID
입니다 :
[MessageContract(IsWrapped = true, WrapperName = "in4", WrapperNamespace = "HEADER_NAMESPACE")]
public class SyncOrderRelationshipReq
{
[MessageHeader(Namespace = "HEADER_NAMESPACE")]
public IBSoapHeader IBSoapHeader { get; set; }
[MessageBodyMember(Namespace = "NAMESPACE_2")]
public UserID userID { get; set; }
}
[MessageContract(WrapperNamespace = "NAMESPACE_2", IsWrapped = true)]
public class UserID
{
[MessageBodyMember(Namespace = "NAMESPACE_3")]
public string ID { get; set; }
[MessageBodyMember(Namespace = "NAMESPACE_3", Name = "type")]
public int Type { get; set; }
}
내가 내부를 필요로 긴 이야기를 짧게 만들려면 MessageBodyMember의 멤버는 자신의 네임 스페이스가 설정되어이 멤버를 읽을 수 있습니다.