2015-01-16 2 views
0

클라이언트에는 .Net MVC4 프로젝트를 통해 수신해야하는 xml 비누 형식의 요청을 보내는 서비스가 있습니다. 요청 형식은 다음과 같습니다.mvc로 비누 요청을 모델링하는 것이 가능합니까?

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <ReceiveStatusUpdate xmlns="http://test.com"> 
      <StatusUpdate> 
       <Reference>214563</Reference> 
       <ThirdPartyReference>YOUR-REFERENCE</ThirdPartyReference> 
       <Status>Pending</Status> 
      </StatusUpdate> 
     </ReceiveStatusUpdate> 
    </soap:Body> 
</soap:Envelope> 

이 요청을 받고 구문 분석하는 가장 좋은 방법은 무엇일까요?

+0

관심이 있으신 분은 MVC를 통해 처리해야합니까? WCF 또는 잠재적으로 웹 API 끝점은 어떻습니까? web api + soap에 대한 설명은이 스레드를 참조하십시오. http://stackoverflow.com/questions/11317572/asp-net-webapi-soap –

+0

나는 WebAPI를 만들고 RESTful 인터페이스를 통해 클라이언트와 대화하거나 MVC 애플리케이션 대신 WCF 서비스를 작성한다. SOAP를 사용해야합니다. 상자 밖에서는 MVC가 SOAP 메시지를 처리 ​​할 수있는 방법이 없으므로 사용자 정의 코드로 처리해야합니다. –

답변

0

이것을 달성하는 가장 쉬운 방법은 구식 asmx 웹 서비스를 사용하는 것입니다.

웹 API를 통한 노출은 SOAP 바인딩을 지원하지 않으므로 상당한 작업이 필요합니다.

WCF 서비스를 사용할 수는 있지만 유연성을 위해 지불해야하는 비용은 구성하기가 까다 롭고 시간이 많이 걸릴 수 있습니다.

간단히 말해서 SOAP 바인딩 만 지원해야하는 경우 해당 작업을 위해 만들어진 도구 (asmx 웹 서비스)를 사용하십시오.

아래와 같은 웹 서비스 (ASMX) 유형의 MVC 프로젝트에 새 항목을 추가하기 만하면됩니다 (StatusUpdate 클래스는 별도의 파일에 정의되어 있음).

/// <summary> 
/// Summary description for StatusWebService 
/// </summary> 
[WebService(Namespace = "http://test.com")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService] 
public class StatusWebService : System.Web.Services.WebService 
{ 

    [WebMethod] 
    public void ReceiveStatusUpdate(StatusUpdate StatusUpdate) 
    { 
     //Do whatever needs to be done with the status update 
    } 
} 

public class StatusUpdate 
{ 
    public string Reference { get; set; } 
    public string ThirdPartyReference { get; set; } 
    public string Status { get; set; } 
} 
+0

고마워요, 제가 할 수있는 바른대로 이것에 대한 현상금을 드리겠습니다. 그러나 요청을 내 컨트롤러 메서드에서 입력 스트림을 구문 분석을 통해 일하고있어, 내 솔루션을 별도의 응답을 남겨 두겠습니다 – lisburnite

0

제 생각에는 누군가가 WebAPI를 선택하는 것이 더 좋을 수도 있습니다. 사용하기 쉽고 코드가 약간이므로 빛이납니다. .NET에서 XML 문서를 처리 할 수있는 도구가 많이 있으므로 문제는 없습니다.

한 가지 더 있습니다. XML에 오류가 있습니다. 닫는 태그 "ReceiveStatusUpdate"의 철자가 잘못되었습니다.

처음에는 도움이 될 것입니다 : http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api 그러면 Fiddler를 사용하여 XML을 WebAPI에 게시 할 수 있습니다.

+0

감사합니다. 나는이 질문에 대한 실제 xml 태그를 변경했습니다. – lisburnite

+0

좋아요, 그러면 더 필요한 것은 무엇입니까? – Eru

1

약간 해킹 된 방법이지만 나를 위해 효과가 있으며 처리해야하는 요청 유형 중 하나입니다. 기본적으로 요청 본문을 꺼내 XDocument로 파싱했습니다.

public ActionResult Update() 
{ 
    var inputStream = Request.InputStream; 
    inputStream.Seek(0, SeekOrigin.Begin); 
    var request = new StreamReader(inputStream).ReadToEnd(); 
    var soapRequest = XDocument.Parse(request); 
    ... 
} 
관련 문제