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


131

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 일 수 있음) 것으로 나타났습니다. 다양한 액세스 권한을 할당하려고 시도했지만 어떤 사용자에게 권한이 필요한지 또는 빨간색 청어인지 확실하지 않습니다.

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

감사

답변:


303

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

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


3
또는 "참조 된 어셈블리의 유형 재사용"이 실제로 필요한 경우 해당 목적을 위해 특별히 작성된 클래스 라이브러리 프로젝트에서 서비스 참조를 추가 할 수 있습니다. 추가 정보는 답장 을 확인하십시오 .
Florin Dumitrescu

"재사용 유형"을 선택 취소하지 않고 솔루션을 원했고 제대로 작동하는 솔루션을 찾았 습니다 . 여기에서 내 대답을 참조 하십시오 .
Shahin Dohan

이와 같은 작업을 수행하는 대신 WCF 클라이언트가 참조하는 모든 것을 맹목적으로 사용하는 대신 WCF 클라이언트가 의존하는 어셈블리를 사용하십시오. 문제가있는 확인란을 선택 취소하는 것보다 까다 롭고 시간이 오래 걸릴 수 있지만이 솔루션이 다른 솔루션보다 더 적합하다는 것을 알았습니다 답변으로 표시됩니다.
Oscar Guillamon

또한 프로젝트 읽기 Only..This 내 문제가 아니 었되어 있는지 확인합니다 ..
arihanth 자이나교는

126

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

서비스 참조 구성

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

재사용 유형

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


2
참조 된 어셈블리를 재사용해야하는 경우 어떻게합니까? 프로젝트가 있고 해당 확인란이 선택되어 있습니다. 내 컴퓨터에서는 업데이트가 작동하지만 직장의 컴퓨터에서는 ... 실마리가 없습니까?
Ricardo Appleton

내 프로젝트에서 v4.6.1에서 v4.7로 업그레이드했을 때 이런 일이 발생했습니다. 이것은 그것을 고쳤다.
Mike Flynn

17

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

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

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

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

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

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

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


기묘한. 바인딩을 HttpBinding에서 NetNamedPipeBinding (mex 끝 점도 추가)으로 변경하고 클라이언트 어셈블리 A에서이를 권장했습니다. WCF 서비스를 참조하는 새 클래스 라이브러리 B를 만들었습니다. 그런 다음 B를 A에 대한 참조로 추가하고 마술처럼 모든 것이 다시 작동합니다. 아주 이상한. 해결책에 감사드립니다
citronas

3

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

위의 기사 덕분에.

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

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


1

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

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

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


Aliostad에게 감사드립니다. 직장에 들어갈 때 WSDL을 공유하려고합니다.
jheppinstall

0

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

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

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

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


0

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

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


0

같은 문제에 직면, 관리 모드에서 Visual Studio를 실행하여 해결


0

VS2015 Professional에서 VS2010 WCF + Silverlight 솔루션을 업그레이드 할 때이 문제가 발생했습니다 . Silverlight 4에서 Silverlight 5로 자동 업그레이드 외에도 서비스 참조 재사용 확인란 값이 변경되어 생성에 실패했습니다.


0

이 오류가 발생할 때 "재사용 유형"이 항상 문제가되는 것은 아닙니다.

이전 서비스에 대한 참조를 추가 할 때 '고급'을 클릭하고 '웹 참조 추가'를 클릭하십시오. 이제 wsdl에 연결하면 모든 것이 작동해야합니다.


0

어셈블리 재사용 확인란을 해제하지 않고이 문제를 해결하려면 다음과 같이하십시오.

  • 재사용하려는 참조 된 어셈블리 제거
  • 프로젝트의 모든 bin 폴더를 삭제하십시오.
  • 서비스 참조 업데이트
    • "지정된 참조 조립품에서 재사용 유형"유지
  • 오류를 수정하기 위해 어셈블리에 대한 참조를 다시 추가하십시오.
  • 서비스 참조를 다시 업데이트

0

Visual Studio를 다시 시작하면 속임수가되었습니다. VS 2015를 사용하고 있습니다.


-1

서비스 참조를 업데이트하려고 할 때 (서비스 참조를 추가 할 때만 오류가 표시됨)이 문제가 있었지만 어셈블리 재사용 확인란을 제거하고 싶지 않았습니다.

나를 위해 일한 것은 다음과 같습니다.

  • 재사용하려는 참조 된 어셈블리 제거
  • 서비스 참조 업데이트
  • "지정된 참조 조립품에서 재사용 유형"유지
  • 오류는 무시하십시오. 참조가 없기 때문입니다!
  • 오류를 수정하기 위해 어셈블리에 대한 참조를 다시 추가하십시오.
  • 서비스 참조를 다시 업데이트

Voila, 이제 실제로 업데이트되어 생성 된 모든 코드를 더 이상 제거하지 않습니다.

재사용 유형 기능을 포기할 준비가 거의되었습니다 ...

편집 : 또한 svcutil이 x64에서 버그가 있기 때문에 빌드 구성이 AnyCPU 또는 x86인지 확인하십시오.

downvoter에게 : 그것이 당신에게 효과가 없다면 미안하지만 그것이 왜 효과가 있었는지는 모르겠지만 그랬습니다. 그 시점에서 문제를 해결 한 다른 일을했지만 지금 알 방법이 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.