WSDL에서는 ServiceNyPeatTribute가 나타나지 않습니다
-
19-09-2019 - |
문제
서비스 인터페이스가 있습니다.
[ServiceContract]
[ServiceKnownType(typeof(Models.ArticleImage))]
public interface IPhotoManagementService
{
[OperationContract]
bool Login(string username, string password);
[OperationContract]
bool IsLoggedIn();
[OperationContract]
void UpdateImage(string articleID, string selectedImage);
}
보시다시피 나는 servicecontract에 typeof (models.articleimage)를 지정합니다.
따라서이 서비스의 WSDL을 구축하면 WSDL에 기사가 팝업 될 수 있습니다. 불행히도 이것은 전혀 일어나지 않습니다. 왜 그런 겁니까?
ArticleAmage에는 데이터가 있습니다. 그리고 인터페이스에서 articleimage를 반환하면 WSDL은 articleimage를 선택합니다.
편집 : 소비 프로젝트에서 서비스 참조에도 팝업되지 않습니다!
이것은 많은 테스트의 결과입니다.
- 내가 추가하려는 모델은 LINQ에서 SQL 모델입니다.
- ServiceType가있는 일반 모델을 추가하면 작동합니다.
- 내 인터페이스에서 LINQ에서 SQL 엔티티를 사용하면 작동합니다.
- ServiceType를 통해 LINQ에 SQL 엔티티를 추가하면 팝업되지 않습니다.
해결책
왜 필요한가요? 귀하의 서비스는 어디에서 할 수있는 무언가를 노출합니까? 혹시 콩 ArticleImage
?
당신의 의견; 사용할 때 [ServiceKnownType]
, 여분의 트리페는 여전히 "MEX"( "SVCUTIL"을 통해 소비)에 여전히 노출되지만 WSDL은 아닙니다. WCF 클라이언트를 사용하고 있습니까? 나타나야합니다 (방금 확인했습니다 ... 그랬습니다). 그러나 일반적으로 웹 서비스에서 모호한 데이터를 반환하는 것은 좋은 아이디어가 아닙니다 ... 하위 유형, 물론! Dictionary<string,ArticleImage>
또는 Dictionary<string,SomeBaseType>
(와 함께 [KnownType]
등), 좋아! 하지만 object
, HashTable
, 등 - 좋은 생각 (IMO)이 아닙니다.
당신은 또한 a를 반환 할 수도 있습니다 목록 당신의 유형의 (List<ArticleImage>
) 모든 시나리오에서 작동합니다 (WSDL 등의 경우 쉽게). 그리고 고객이 끝에 사전을 만들게하십시오.
LINQ-to-SQL과 관련하여; "Mex"에 대한 개체는 [DataContract]
/ [DataMember]
. DBML의 "직렬화"속성을 토글하여 설계된 상태에서이를 수행 할 수 있습니다. 이 세트 (직렬화 모드 = 단방향)를 사용하면 작동해야합니다. 그러나 솔직히 말해서, 나는 당신이 API에서 유형을 명시 적으로 만드는 더미 방법을 추가하는 것만으로도 더 나은 것이라고 생각합니다.
다른 팁
서비스 계약 운영의 입력/출력 매개 변수로 사용되는 유형 만 WSDL에 게시됩니다.