2012-01-27 3 views
0

저는 몇 년 동안 몇 가지 C# 프로젝트를 작업 해 왔으며 일반적으로 규칙은 프로젝트 유형에서 프로젝트 유형에 이르기까지 일관됩니다. 그러나 WCF Webservice 프로젝트를 시작하면서, 나는 조금 다른 것을 발견하고 있습니다. 들어오는 XML을 스키마에 대해 유효성을 검사해야합니다. 스키마를 저장하기 위해 프로젝트 루트 인 XSD에서 폴더를 생성했습니다. 폴더에 XSD를 참조 할 때 이전 프로젝트에서,이 같은 것을 사용했습니다 다음 XSD 파일에 대한WCF Webservice 응용 프로그램에서 파일을 어떻게 참조합니까?

  XmlTextReader textReader = null; 
      XmlSchemaCollection xSchemaCollection = null; 
      XmlValidatingReader valReader = null; 

      string uri = string.Format(@"{0}\{1}", Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), XSDPath); 

      // text reader object 
      textReader = new XmlTextReader(uri); 
      xSchemaCollection = new XmlSchemaCollection(); 
      xSchemaCollection.Add(null, textReader); 

      // XML validator object 
      valReader = new XmlValidatingReader(strXMLDoc, XmlNodeType.Document, null); 

속성은 폴더를 대상으로 항상 복사로 설정됩니다. 일반적으로 XSD에 대한 유효한 경로를 얻었고 모든 것이 잘 진행됩니다. 그러나이 WCF Webservice 프로젝트에서 XSD 파일을 복사하는 경로는 임시 디렉터리이므로 올바른 경로를 얻지 못합니다. xSchemaCollection.Add 메서드가 실패합니다.

현재로서는 XSD 폴더가 WCF 프로젝트에 없습니다. 위의 코드가 현재있는 클래스 라이브러리 프로젝트를 추가했는데 그 위치가 폴더와 파일입니다. 나는 임시 디렉토리 문제를 제거 할 것으로 예상했으나 그렇지 않았다.

내가 잘못하고있는 아이디어가 있습니까? 미리 감사드립니다.

+0

WCF가 통신하는 데 사용하는 XML의 유효성을 검사하려고합니까? WCF를 통해 XML을 전송하고 있습니까? 이 서비스의 목적은 무엇입니까? –

+0

다른 것들 중에서도 오래된 기술을 사용하고 있습니다. 'XmlTextReader()'가 아닌'XmlReader.Create()'를 사용하십시오. 'XmlValidatingReader() '와 동일합니다. –

답변

0

WCF는 매우 강력한 프레임 워크이지만 WCF의 핵심 개념 중 하나는 서비스 정의가 통신 채널의 구현 세부 사항에서 추상화된다는 것입니다. 즉, WCF 서비스는 XSD 파일이 해당 내용을 설명하는 데 사용되는 정보가 없거나 XSD 파일이 전혀 사용되지 않더라도 (서비스 바인딩이 반드시 SOAP을 사용하는 것은 아님)

기존 프로토콜을 따르려고하거나 프로토콜의 다른 모든 측면이 웹 표준을 준수하는 복잡한 프로토콜의 한 측면을 사용자 지정하려는 경우 WCF가 효과적입니다. 그러나, 당신이하는 일이 그보다 더 내려 가고 더러운 것처럼 들립니다.

SOAP 메시지를 비표준 방식으로 직접 처리해야하는 경우 WCF가 해당 작업에 가장 적합한 도구가 아닐 수 있습니다. HttpHandler 나 오래된 asmx 파일과 같은 다른 서비스 구현 전략을 사용하는 것이 좋습니다. Asmx 기반 웹 서비스는 WCF만큼 정교하지는 않지만 비표준 프로토콜에 대한 유연성을 높이기 위해 정교함이 부족합니다.

+0

고마워요, 폴. 필자는 필자의 프로젝트 선택에 다소 제약이 있습니다. (필자는 곧 테스트 버전을 발표해야합니다.) 다음 테스트가 완료되면 다른 아키텍처에 대한 사례를 만들 수 있습니다. 그동안 XSD의 문자열 표현을 대신 사용하여 솔루션을 해킹 할 수 있다고 가정합니다. – user1172619

0

어떤 이유에서든 파일 시스템을 통해 XSD에 액세스하는 데 문제가 있다면 어셈블리 내에서 리소스로 포함시킬 가능성이 큽니다. 당신이해야 할 일은 사용자 정의 리졸버를 사용하는 것입니다 (소리에서부터,이 XSD는 include/imports를 사용하지 않는 것처럼 보이고, 사용자 정의 리졸버는 확실히 갈 방법입니다) ...

관련 문제