이 영역을 둘러싼 몇 가지 다른 질문이 있지만 지금은 약간 중복되어 있습니다. 그 (것)들에 어떤 응답든지 또한 평가 될 것이나이 질문은 분에 나의 주요 관심사이다.WSE 3.0 - Byte 배열이 Base64로 인코딩되고 "MTOM-ing"가 아닌 이진수로
필자는 MTOM/XOP가 WSE 3.0에서 작동하는 방식에 대한 많은 예제를 따라 왔으며 필요에 따라 프로젝트를 정확하게 설정했습니다. DataType : -base64Binary로 지정된 Byte 배열 필드가 있습니다. 여기에 추가 할 첨부 파일의 Byte 배열을 넣습니다. 애플리케이션을 실행하고 요청을 확인하면 데이터가 인라인으로 base64로 인코딩됩니다 (즉, XOP 포함 요소 및 관련 MIME 부분 제외).
WSE 3.0 내의 MTOM을 이해하면 인코딩 할 때 base64Binary로 지정된 모든 필드를 가져 와서 이진 코드로 인코딩 한 다음 MIME 파트로 이동하여 XOP Include 요소로 바꾸는 것이 좋습니다. 즉, 방금 효과가있었습니다. 그러나 참조 파일에서 Microsoft.Web.Services3.WebServicesClientProtocol
상속 서비스를 설정하고 RequireMtom
플래그를 true로 설정했는데 여전히 인코딩이 올바르지 않습니다.
여기에 뭔가가 빠졌습니까? 이 작업을 수행하기 위해 구현해야하는 다른 단계가 있습니까?
편집 : 100 시간 동안 내 코드를 살펴본 후 ProcessMessage 메서드를 실행하기 전에 페이로드를 serialize해야한다는 사실 때문에 문제가되는지 궁금합니다. 이게 문제가 될 것 같은데요? 우리가 직렬화 한 이유는 우리가 사용해야하는 메서드가 content 속성을 가진 "Payload"매개 변수를 받아들이 기 때문입니다.이 내용 속성은 XMLElement 속성이며 필요한 클래스를 serialize하는 유일한 방법입니다. 그러나 이것은 MT64가 base64 필드의 데이터 유형을 인식하는 것을 멈추고 따라서 MIME 부분과 XOP로 바이너리로 변환되지 않습니까? 그냥 빨대에 지금 정말로 쥐고 있습니다.
편집 2 : 아래 해결 방법이 있지만 써드 파티 회사는 현재 네임 스페이스 접두사가 잘못되었다고 말합니다. 우리는 <q1:Attachment xmlns:q1="http://whatever" />
과 같은 것을 가지고 있고 그들은 그것이 <s:Attachment xmlns:s="http://whatever" />
일 것을 요구하고 있습니다. 내가 화가 나거나 그게 중요하지 않니? 네임 스페이스 접두사를 할당하는 방법을 알려줄 수있는 방법이 있습니까?
예제를 수정하지 않고 사용해 본 적이 있습니까? –
내가 발견 한 모든 예제가 작동하려면 하나의 변경이 필요했고, 이는 'System.Web.Services.Protocols.SoapHttpClientProtocol' 대신'Microsoft.Web.Services3.WebServicesClientProtocol'을 상속하도록 클래스를 변경하는 것이 었습니다. 그 변화가 이루어지면 모든 것이 잘 작동했습니다. 그러나이 변경은 메소드를 호출하기 전에 직렬화 단계와 관련이 있다고 생각하기 때문에 코드에 차이가 없습니다. – anothershrubery
예제가 작동하지만 코드가 작동하지 않는 상황에 이르면 작동 예제부터 시작하여 _slowly_ 리팩터링하여 코드 수행에 필요한 작업을 수행합니다. 내가 깨면 바로 이전 작업 코드로 되돌아 간다. 그리고 나서 내가 필요로하는쪽으로 천천히 움직인다. 그런 식으로, 나는 결국 무엇이 잘못되었는지 찾아 낸다. –