문제

서비스 인터페이스가 있습니다.

[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에 게시됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top