[C#] 서비스 참조 오류 : 서비스 참조에 대한 코드를 생성하지 못했습니다.

Windows 서비스 솔루션이 있는데 VS2010의 Hermes (Opensource ebms 메시지 서버) 웹 서비스에 서비스 참조를 추가하려고합니다.

URL을 사용하여 웹 서비스를 찾을 수 있지만 서비스 참조를 채우려 고 시도하면 Visual Studio에서 다음 오류가 발생합니다.

Error 8 Custom tool error: Failed to generate code for the service reference 'testService'.  Please check other error and warning messages for details. C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler


Warning 6 Custom tool warning: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Warning 7 Custom tool warning: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:service[@name='EbmsMessageStatusQuery']/wsdl:port[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Warning 5 Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.XmlSerializerMessageContractImporter
Error: Schema with target namespace 'http://service.ebms.edi.cecid.hku.hk/' could not be found.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

일부 조사에 따르면 디렉토리에 대한 권한이 없기 때문에 svcutil.exe가 프록시를 빌드하지 못했기 때문에 (c : \ windows \ temp 일 수 있음) 것으로 나타났습니다. 다양한 액세스 권한을 할당하려고 시도했지만 어떤 사용자에게 권한이 필요한지 또는 빨간색 청어인지 확실하지 않습니다.

어떤 아이디어라도 대단히 감사하겠습니다.

감사



답변

서비스 참조 구성에서 참조 된 모든 어셈블리에서 유형 재사용 옵션을 선택 취소해야합니다.

자세한 내용은 이것을 확인하십시오


답변

서비스 참조를 마우스 오른쪽 버튼으로 클릭하고 Configure Service Reference...

서비스 참조 구성

그런 다음 선택을 취소하십시오 Reuse types in referenced assemblies

재사용 유형

을 클릭 OK하고 솔루션을 정리하고 다시 빌드하십시오.


답변

Visual Studio 2012를 사용하여 ASP .Net MVC 4.0 프로젝트에서 웹 서비스 용 클라이언트를 생성하려고 할 때도 비슷한 오류가 발생했습니다.

문제의 근본 원인은 클라이언트를 생성하려고 시도한 프로젝트가 어셈블리를 참조하고 있다는 것입니다.이 어셈블리는 참조되지 않은 다른 어셈블리에 의존합니다.

서비스 구성에서 “참조 된 어셈블리의 유형 재사용”이 활성화 된 경우 서비스 생성기는 재사용 가능한 유형 목록을 얻기 위해 참조 된 모든 어셈블리를 검사하고있을 것입니다. 참조 된 조립품 중 하나가 사용할 수없는 다른 조립품을 참조하고 있다는 사실은 아마도 발전기가 고장날 수 있습니다.

서비스 구성에서 “참조 어셈블리의 유형 재사용”을 선택 취소하면 위의 문제가 해결 되지만 부작용이 있습니다. 재사용 유형 옵션은 이유 가 있으며 경우에 따라 서비스를 소비하는 코드에서 불필요한 캐스팅을 피할 수 있습니다.

예를 들어, 서비스 자체가 WCF를 사용하여 빌드되고 그 안에 일부 메소드 매개 변수가 System.Guid 유형 인 경우, 재사용 유형 옵션이 사용 불가능한 경우 생성 된 클라이언트에서 문자열로 변환됩니다.

재사용 유형을 비활성화하는 것을 선호하는 대안 은 해당 목적을 위해 특별히 작성된 클래스 라이브러리 프로젝트의 서비스 참조를 추가하는 것입니다. 명심해야 할 것은 모든 서비스 관련 구성을 클래스 라이브러리의 app.config에서 시작 프로젝트의 구성 파일로 복사하는 것입니다.

서비스 클라이언트에서 재사용해야하는 로컬 어셈블리에 정의 된 유형이있는 경우 해당 어셈블리는 위에서 언급 한 클래스 라이브러리 프로젝트에서 모든 종속성과 함께 참조하면됩니다.


답변

http://uliasz.com/2011/06/wcf-custom-tool-error-failed-to-generate-code-for-the-service-reference/#comment-1647

위의 기사 덕분에.

필자의 경우 VS.Net 2008의 WPF 프로젝트 에이 문제가 있습니다.이 기사를 거친 후 웹 서비스에 사용 된 어셈블리가 클라이언트에서 사용되는 어셈블리 버전과 다르다는 것을 깨달았습니다.

클라이언트에서 어셈블리를 업데이트 한 후에 만 ​​작동합니다.


답변

WSDL의 오류로 인해 문제를 추측하기가 매우 어려우며 WSDL 을 검사하지 않으면 더 많은 의견을 말할 수 없습니다. WSDL을 공유 할 수 있다면 공유하십시오.

내가 말할 수있는 것은 WSDL에 누락 된 스키마가있는 것입니다 (대상 네임 스페이스 ‘http://service.ebms.edi.cecid.hku.hk/’). 포함 명령이 무시 될 때 문제와 스키마의 다른 처리에 대해 알고 있습니다.

일반적으로 Microsoft의 웹 서비스 구현이 꽤 좋았 기 때문에 웹 서비스가 복잡한 WSDL을 다시 보내고 있다고 생각합니다.


답변

Silverlight 5 (VS2012)에서 동일한 오류가 발생합니다.

다음에 대한 참조를 제거 할 수도 있습니다.

  • System.ServiceModel.DomainServices.Client
  • System.ServiceModel.DomainServices.Client.Web

서비스 참조를 업데이트 한 후 다시 추가하십시오.


답변

위에서 언급했듯이 몇 가지 다른 문제가있을 수 있습니다. 우리가 찾은 것은 WCF 라이브러리의 .DLL이 클라이언트 프로젝트에 대한 참조로 추가되었다는 것입니다. 결과적으로, 객체를 해결하는 데 문제가 발생하여 코드 생성 단계에 의해 파일이 “비워집니다”. “재사용 유형 …”사용을 선택 취소하면 대답처럼 보일 수 있지만, 새로운 네임 스페이스에서 실제 유형에 대한 프록시 인 객체 유형에 대한 추가 정의를 작성하여 모든 유형의 “호환성”문제가 발생합니다. 이러한 유형의 사용. 실제로 유형을 “숨기기”하려는 경우에만이 옵션을 선택해야합니다.

“DLL”형식의 종속성이 다른 프로젝트와 분리되어있는 프로젝트에 “누설”되지 않도록하려면 형식을 숨기는 것이 적절합니다. WCF 라이브러리 프로젝트의 DLL이 클라이언트 프로젝트 참조로 들어 오면 유형 정의도 DLL에 있기 때문에 모든 종류의 이상한 부작용이 발생합니다.