2013-04-26 4 views
1

SoapUI를 사용하여 ServiceStack을 사용하여 만든 API를 테스트하고 필요한 DataMember를 헤더를 통해 보내려고 할 때 api가 올바른 값을 반환합니다. 나는 몸을 통해 필요한 DataMember를 보내려고 할 때, 나는 아래의 오류를 얻고있다 ... 몸ServiceStack : SerializationException

<GetProductDetailsReq> 
<AToken>ck0b0YYBPkrnVF/j6e16DUPzxLX2SMCXewoR4T</AToken> 
</GetProductDetailsReq> 

POST http://localhost/ServiceStackAPI/GetProductDetails HTTP/1.1 
Accept-Encoding: gzip,deflate 
Content-Type: application/xml 
Accept: application/xml 
Content-Length: 777 
Host: localhost 
Proxy-Connection: Keep-Alive 
User-Agent: Apache-HttpClient/4.1.1 (java 1.5) 

응답 상태

Error Code SerializationException Message Could not deserialize 'application/xml' request using ServiceModel.DTO.GetProductDetailsReq' Error: System.Runtime.Serialization.SerializationException: Error in line 1 position 66. Expecting element 'GetProductDetailsReq' from namespace ''.. Encountered 'Element' with name 'GetProductDetailsReq', namespace ' http://schemas.servicestack.net/types '. at System.Runtime.Serialization.DataContractSerializer.InternalReadObject(XmlReaderDelegator xmlReader, Boolean verifyObjectName, DataContractResolver dataContractResolver) at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver) at System.Runtime.Serialization.XmlObjectSerializer.ReadObject(XmlDictionaryReader reader) at System.Runtime.Serialization.XmlObjectSerializer.ReadObject(Stream stream) at ServiceStack.Text.XmlSerializer.DeserializeFromStream(Type type, Stream stream) at ServiceStack.WebHost.Endpoints.Support.EndpointHandlerBase.CreateContentTypeRequest(IHttpRequest httpReq, Type requestType, String contentType) Stack Trace at ServiceStack.WebHost.Endpoints.Support.EndpointHandlerBase.CreateContentTypeRequest(IHttpRequest httpReq, Type requestType, String contentType) at ServiceStack.WebHost.Endpoints.RestHandler.GetRequest(IHttpRequest httpReq, IRestPath restPath) at ServiceStack.WebHost.Endpoints.RestHandler.ProcessRequest(IHttpRequest httpReq, IHttpResponse httpRes, String operationName)

답변

0

확인을 통해 전송

요청을 도와주세요 SOAP Limitations을 사용하여 SOAP로 전송할 수있는 서비스를 만들 수 있습니다. 즉, 요청 DTO가 GetProductDetails이라면 GetProductDetailsResponse이라는 응답 DTO를 반환해야합니다. 또한 귀하의 DTO가 모든 유형에 [DataContract], 모든 공공 재산에 [DataMember]을 갖고 있는지 그리고 DTO가 single namespace인지 확인해야합니다.

이 요청의 다른 문제는 잘못된 엔드 포인트 주소에 대한 SOAP 요청을 사용하고 있다는 것입니다. 즉, SOAP 종점은 /soap11 또는 /soap12입니다. 위의 예에서는 /GetProductDetails 사용자 지정 HTTP 경로로 보내려고하는데 SOAP의 경우 /soap11 또는 soap12 중 하나 일 필요가 있습니다.

당신은 다음 방금과 같은 예를 들어 요청 DTO, 직렬화에 의해 당신이 보이는 것을 알 수 원시 XML 페이로드를 보내야 단지 HTTP를 통해 XML을 보낼 않은 경우 :

string requestXml = new GetProductDetails { ... }.ToXml(); 

를 어떤을 쉽게 HTTP Utils로 보낼 수 있습니다

var responseXml = "http://localhost/ServiceStackAPI/GetProductDetails" 
    .PostXmlToUrl(xmlRequest); 

var responseDto = responseXml.FromXml<GetProductDetailsResponse>(); 

을 당신이 GetProductDetails 요청 DTO에 정의 된 [Route("/GetProductDetails")]이 가정.