2011-08-05 8 views
0

WCF 서비스 라이브러리를 구축했으며 일부 타사 DLL에 대한 참조가 추가되었습니다. 이것은 내 인터페이스입니다WCF 서비스 라이브러리를 실행하는 중 오류가 발생했습니다.

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
    3rdpartyreturntype GetObj(System.Windows.Controls.Control txtcontrol); 
} 

// Use a data contract as illustrated in the sample below to add composite types to service operations 
[DataContract] 
public class nclass 
{ 
    [DataMember] 
    public System.Windows.Controls.Control txtcontrol 
    { 
     get { return txtcontrol; } 
     set { txtcontrol = value; } 
    } 

    [DataMember] 
    public 3rdpartyreturntype nobj 
    { 
     get { return vuiobj; } 
     set { vuiobj = value; } 
    } 

    [DataMember] 
    public System.Windows.Input.TouchDevice tchdev 
    { 
     get { return tchdev; } 
     set { tchdev = value; } 
    } 
} 

그리고 위의 인터페이스를 구현했습니다. 서비스를 실행할 때 아래 오류가 발생하면 누구든지 나를 도울 수 있습니까?

'System.Windows.Input.TouchDevice'형식을 serialize 할 수 없습니다. 을 DataContractAttribute 특성으로 표시하고 DataMemberAttribute 특성을 사용하여 serialize하려는 해당 멤버의 을 모두 표시합니다.

+0

3rdpartyreturntype 모두에 대한 래퍼를 작성할 수 있습니까? 그렇다면'[DataMember]'속성으로 표시 할 수 있습니다. –

답변

0

클래스와 같은 복합 유형을 직렬화하려는 경우 각 구성원을 데이터 멤버 및 datacontract 클래스로 선언해야합니다.

이 경우 터치 장치는 복합 유형 (클래스)이므로 모든 구성원을 datamont로 표시하고 datacontract로 표시해야합니다.

하지만 형식에서 볼 수 있듯이 system.windows.input에 속합니다. 클래스가 직렬화되지 않을 수 있습니다. 따라서 이것을 데이터 멤버로 사용할 수 없습니다.

touchDevice 클래스에 속한 멤버 집합 만 사용하는 경우 직렬화 할 수있는 터치 장치 멤버 집합 만 매핑하는 고유 한 클래스를 만들 수 있습니다. datacontract 및 datamember 속성을 사용하여이 새로운 클래스를 꾸미십시오.

+0

GetObj 메서드는 타사 메서드이며 예상되는 매개 변수는 System.Windows.Controls.Control이므로 변경할 수 없습니다. 또한 터치 장치를 추가 한 이유는 오류가 발생했기 때문이며 어디서든 사용하지 않을 수 있습니다 (아마도 3 부 dll은 확실하지 않습니다). 또한 나는 반사체를 사용했고 제 3 자 클래스 "3rdpartyreturntype"을 보았습니다. 멤버를 내 자신의 클래스에 매핑하고 그 클래스를 직렬화 할 수 있다면 말이죠. 하지만 내가 본 것에서 볼 때 그 재산 중 하나는 서비스입니다. 모든 속성을 매핑해야합니까? 어떻게 서비스를 매핑 할 수 있습니까? – user869861

0

"System.Windows.Input.TouchDevice"유형 자체가 직렬화 가능 또는 DataContract로 표시되지 않은 것처럼 보입니다.

TouchDevice와 컨트롤을 직접 전달하려는 대신 관심있는 속성 만 전달하면됩니다. TextControl의 경우 Text 값에 대해 신경 쓰고 있습니다. TouchDevice의 경우 소스 및 대상 컨트롤 이름이 무엇입니까?

+0

GetObj 메서드는 타사 메서드이며 예상되는 매개 변수는 System.Windows.Controls.Control이므로 변경할 수 없습니다. 또한 터치 장치를 추가 한 이유는 오류가 발생했기 때문이며 어디서든 사용하지 않을 수 있습니다 (아마도 3 부 dll은 확실하지 않습니다). 또한 나는 반사체를 사용했고 제 3 자 클래스 "3rdpartyreturntype"을 보았습니다. 멤버를 내 자신의 클래스에 매핑하고 그 클래스를 직렬화 할 수 있다면 말이죠. 하지만 내가 본 것에서 볼 때 그 재산 중 하나는 서비스입니다. 모든 속성을 매핑해야합니까? 어떻게 서비스를 매핑 할 수 있습니까? – user869861

관련 문제