이 WCF 오류는 무엇을 의미합니까? "커스텀 도구 경고: wsdl:portType을 가져올 수 없습니다.
솔루션에서 WCF 서비스 라이브러리 프로젝트를 생성하여 이에 대한 서비스 참조를 가지고 있습니다.클래스 라이브러리의 서비스를 사용하기 때문에 클래스 라이브러리 외에 WPF 어플리케이션프로젝트의 레퍼런스가 있습니다.서비스는 바로 셋업됩니다.비동기 서비스 기능을 취득하기 위해서만 변경됩니다.
서비스 레퍼런스를 갱신하기 전까지는 모든 것이 정상적으로 동작하고 있었습니다.실패해서 결국 롤백해서 재시도했는데 실패했어!따라서 서비스 참조를 변경하지 않으면 업데이트가 실패합니다. 왜?!
오류는 다음과 같습니다.
Custom tool error: Failed to generate code for the service reference
'MyServiceReference'. Please check other error and warning messages for details.
경고는 다음 정보를 제공합니다.
Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension:
System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: List of referenced types contains more than one type with data contract name 'Patient' in
namespace 'http://schemas.datacontract.org/2004/07/MyApp.Model'. Need to exclude all but one of the
following types. Only matching types can be valid references:
"MyApp.Dashboard.MyServiceReference.Patient, Medski.Dashboard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" (matching)
"MyApp.Model.Patient, MyApp.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" (matching)
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='ISomeService']
다음과 같은 두 가지 유사한 경고가 있습니다.
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://tempuri.org/']/wsdl:portType[@name='ISomeService']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='WSHttpBinding_ISomeService']
또한 다음 항목도 마찬가지입니다.
Custom tool warning: Cannot import wsdl:port ..
이 모든 게 혼란스럽네요서비스 레퍼런스를 통해 얻은 것 외에는 클라이언트 측 대시보드에 환자 클래스가 없습니다.그게 무슨 뜻이죠?그리고 왜 갑자기 나타나는 거죠?주의:난 아무것도 바꾸지 않았어!
이 문제의 해답은 여기서 찾을 수 있었습니다만, 이것이 무엇을 의미하는지 설명하지 않았습니다.따라서 서비스의 "Configure service reference"에서 "Reuse types in the referenced assemblys" 확인란을 선택 취소합니다.이제 재구축은 문제없이 잘 작동합니다.하지만 내가 정말 변한 게 뭐야?이것이 신청에 영향을 미칩니까?그리고 언제 이것을 꺼야 할까요?Data Contract를 설정한 유형을 재사용하고 싶지만 더 이상 사용하지 않습니다.이것을 체크하지 않아도 접속할 수 있습니까?
여기서 답을 찾았습니다.http://www.lukepuplett.com/2010/07/note-to-self-don-let-wcf-svcutil-reuse.html
요약하자면, 고급 메뉴에서 참조 어셈블리의 재사용 유형을 선택 해제했습니다.
이게 중요한지는 모르겠지만 저는 MVC가 아니라 웹 폼을 사용하고 있습니다.
서비스 참조를 추가할 때 서비스에서 사용되는 유형을 처리할 수 있는 방법은 두 가지가 있습니다.
- 유형은 dll에 저장되며 해당 dll은 클라이언트와 서버 응용 프로그램 모두에서 참조됩니다.
- 유형이 클라이언트에서 참조하는 dll에 없습니다.이 경우 서비스 참조를 작성하는 툴은 references.cs 파일에 유형을 작성합니다.
잘못될 수 있는 많은 것들이 있다.툴이 크래쉬 했을 경우, 서비스 레퍼런스를 삭제하고 재기동하는 것이 고속인 경우가 있습니다.
서비스 레퍼런스 사용이 중지되었습니다.클라이언트와 서비스를 제어하는 프로젝트에서는 이 스크린캐스트에서 설명하는 방법을 사용합니다.
오늘도 이런 일이 있었어요.실수를 발견하는 데 꼬박 하루가 걸렸다.도움이 됐으면 좋겠다.
가져올 수 없는 클래스에 cutom 열거형 속성이 있습니다.이 속성은 DataMember로 표시되고 Enum도 DataContract로 표시됩니다.지금까지는 아무 문제 없어요.모든 Enum 멤버를 EnumMember로 표시하는 것을 잊었습니다.
그래서 나는 변했다.
[DataContract]
public enum SortMethodType
{
Default = 0,
Popularity = 1,
ReleaseDate = 2,
PublishedDate = 3,
TranslatedTitle = 4,
OriginalTitle = 5,
UserRating = 6,
Duration = 7
}
이를 위해:
[DataContract]
public enum SortMethodType
{
[EnumMember]
Default = 0,
[EnumMember]
Popularity = 1,
[EnumMember]
ReleaseDate = 2,
[EnumMember]
PublishedDate = 3,
[EnumMember]
TranslatedTitle = 4,
[EnumMember]
OriginalTitle = 5,
[EnumMember]
UserRating = 6,
[EnumMember]
Duration = 7
}
그리고 마침내 성공했어!
참조를 추가하는 동안 고급 속성으로 이동하여 "시스템"을 제거합니다.체크리스트의 Window.Browser"를 클릭하면 문제가 해결됩니다.
이상하게 들릴지 모르지만, 저는 참조를 삭제하고 Visual Studio를 닫았다가 다시 열고 마지막으로 참조를 다시 추가함으로써 수정했습니다.
커스텀 툴 같은 걸 다시 시작해야 할 것 같아요.
다른 개발자 머신에서 동작하는 동안 이 오류가 계속 발생합니다.가상 머신의 모든 곳에서 완전한 관리자이지만 Visual Studio를 닫았다가 '관리자로 실행'을 사용하여 다시 열려고 하면 마법처럼 작동했습니다.
행운을 빌어요.
솔루션을 Visual Studio(VS) 2010에서 2013으로 업그레이드하고 각 프로젝트를 변경한 후 경고가 표시되었습니다.NET Framework 4 ~4.5.1 。VS를 닫고 다시 열었더니 경고가 사라졌습니다.
'참조된 어셈블리의 재사용 유형'을 해제하면 애매한 참조 문제가 발생할 수 있습니다.이는 서비스 참조가 참조 .cs 파일에 이러한 개체를 다시 생성하고 서비스를 구현하는 코드가 원래 네임스페이스에서 개체를 참조하는 것일 수 있기 때문입니다.
이 시나리오가 발생할 경우 '지정된 참조 어셈블리의 재사용 유형'을 체크하는 것이 도움이 됩니다.이 경우 참조가 애매한 것만 선택할 수 있으므로 이 방법으로 문제를 신속하게 해결할 수 있습니다.
다른 사람에게 도움이 되길 바라.
WCF 서비스의 인터페이스는 어셈블리에 있고 구현은 다른 어셈블리에 있으며 서비스 참조는 서비스 참조의 클라이언트와는 다른 어셈블리에 있습니다.Data Contract를 Enum에 적용한 직후에 오류 메시지가 표시되었습니다.Enum Member를 Enum 필드에 적용한 후 문제가 해결되었습니다.
서비스에 문제가 없는지 의심스러울 경우(예: Enum 문제 또는 다른 사용자가 언급한 직렬화 불가능한 클래스) 새 참조를 사용하여 새 프로젝트를 생성해 보십시오.
저는 Silverlight 5를 사용하고 있으며, 여러 번 참조를 삭제하고 다시 작성하려고 했습니다.reference.cs
매번 파일이 완전히 비어있었고, 제가 파일을 만든 지 몇 년이 지났기 때문에 서비스에 어떤 변화가 있었는지 알아내는 것은 불가능했습니다.
에러에 2.0.5.0에 대한 참조가 포함되어 있는 것을 알 수 있었습니다.이것이 실제로 Silverlight 버전과 관련이 있는지는 모르겠지만, 새로운 프로젝트를 만들 생각을 하게 되었고, 갑자기 모든 것이 작동하게 되었습니다.
경고 2 사용자 지정 도구 경고: wsdl:portType Detail을 가져올 수 없습니다.WSDL Import 확장 실행 중 예외가 발생하였습니다.시스템.서비스 모델묘사.DataContractSerializerMessageContractImporter 오류: 파일 또는 어셈블리 '시스템'을 로드할 수 없습니다.XML, 버전=2.0.5.0, Culture=중립, 공개키토큰=7cec85d7bea7798e' 또는 그 종속성 중 하나.지정한 파일을 찾을 수 없습니다.XPath에서 오류 소스: //wsdl:definitions[@target Namespace=']/wsdl:port Type[@name=']IShopping Cart' ]
프로젝트를 검토하다가 같은 문제가 발생했어요.WCF에서 동일한 DLL의 버전이 다른 것으로 나타났습니다.웹 사이트웹 사이트에는 최신 버전의 DLL이 있으며 서비스는 이전 버전의 DLL을 참조하고 있습니다.일단 모두 잘 어울리자 모두 잘 작동했다.
저도 같은 오류를 경험했습니다.나는 무엇이 잘못되고 있는지 알아내려고 거의 하루 동안 애를 썼다.내게 단서는 VS가 던지는 경고였다.야후와의 매핑을 시도하고 있었습니다.Yui.Compressor.dll은 며칠 전에 (사용하지 않기로 결정했기 때문에) 추가 및 삭제한 라이브러리입니다.도서관이 없어서 충격적이었는데, 어쩐지 참고하려고 했어요.
마지막으로 휴지통에서 이 dll을 복원하면 서비스 참조를 업데이트할 수 있습니다.
앞으로 여기 계신 모든 분들을 위해, 저는 같은 오류를 범했지만 버전 문제로 인해 두 가지 다른 방법으로 야기되었습니다.
서비스 레퍼런스를 통해 통신하는2개의 WCF 서비스와2개의 클라이언트애플리케이션이 있어요양쪽에서 nuget 패키지를 업데이트하고 서비스 레퍼런스를 업데이트하려고 했는데 이 오류가 발생하였습니다.
삭제해도 소용없었다."어셈블리 재사용"을 선택 해제하는 것은 바람직하지 않습니다.그것이 요점입니다.
결국, 두 가지 다른 문제가 있었습니다.
1) 첫 번째 문제는 비주얼 스튜디오 캐싱 문제였던 것 같습니다.모든 레퍼런스를 꼼꼼히 살펴봤지만 문제가 없었지만 이전 버전의 파일을 찾을 수 없다는 보고가 있었습니다.Nuget 패키지를 모두 제거하고 Visual Studio를 재시작하여 다시 설치했습니다.서비스 레퍼런스 업데이트는 성공.
2) 두 번째 문제는 의존관계 문제로 발생하였습니다.양쪽에서 nuget 패키지를 업데이트 했더니 모두 올바른 것처럼 보였지만, 표시되지 않은 종속성이 동기화되지 않았습니다.예:
패키지 Foo v1은 Bar v1을 참조합니다.Foo 및 Bar를 참조를 업데이트하지 않고 독립적으로 v2로 업데이트할 수 있습니다.Foo와 Bar v2를 모두 설치하면 서비스 참조 도구는 Foo v2를 검색하고 Bar v1에 대한 참조를 참조하며 이전 버전을 찾을 수 없으므로 실패합니다.이는 모든 패키지에 대해 dll 버전 번호를 업데이트한 경우에만 올바르게 보고됩니다.Visual Studio 및 MSBuild는 응용 프로그램을 빌드하는 데 문제가 없지만 서비스 참조를 통해 모든 문제를 해결하려고 할 때 어려움을 겪을 수 있습니다.
이게 도움이 됐으면 좋겠어요.
언급URL : https://stackoverflow.com/questions/1872865/what-does-this-wcf-error-mean-custom-tool-warning-cannot-import-wsdlporttype
'programing' 카테고리의 다른 글
PowerShell 2.0에서 디렉토리 전체를 반복적으로 삭제하는 방법 (0) | 2023.04.22 |
---|---|
셸 - 변수에 대한 내용을 파일에 씁니다. (0) | 2023.04.22 |
비동기 네트워크 요청이 포함된 루프의 실행이 완료될 때까지 기다립니다. (0) | 2023.04.22 |
Swift에서 UTC 시간대(ISO 8601, RFC 3339)의 소수 초로 포맷된 날짜 타임스탬프를 해석/작성하려면 어떻게 해야 합니까? (0) | 2023.04.22 |
Windows에서 임시 디렉토리를 작성하시겠습니까? (0) | 2023.04.22 |