2009-08-24 2 views
1

.NET 2.0의 변경 이전 클라이언트와WCF 서비스 매개 변수 내가 한 paramater이있는 방법을 노출 WCF 서비스를 만들어 클라이언트

서비스는 .NET 3.0 및 .NET 3.5 클라이언트 응용 프로그램에서 올바르게 실행됩니다. 그러나 .NET 2.0 클라이언트를 만들 때 GetData 메서드에는 integer (expected) 및 valueSpecified (unexpected)라는 bool 매개 변수의 두 매개 변수가 필요합니다. 나는 두 번째 매개 변수를 결코 정의하지 않았다. 왜 이런 일이 일어나고 두 번째 매개 변수를 제거 할 수 있습니까?

답변

3

값 유형을 null로 지정할 수 없기 때문에 (.net 프레임 워크의 후자 버전에는 Nullable<T>이 없음) VS는 값 유형을 지정하지 않는 추가 매개 변수를 생성하는 것 외에 서비스 메소드를 이와 같이 호출 할 수 있습니다.

service.GetData(val,true); 

는 속성 this 존 손더스 추가하는 것이 좋습니다 후, [DataMember(Required = true)] 속성을 참조하십시오.

+0

이것은 연결된 사람과 완전히 다른 질문이 아닙니다. 이 경우 클라이언트는 Nullable 클래스를 포함하는 .NET 2.0입니다. 그러나 솔루션은 여전히 ​​적용됩니다. –

0

프록시 클래스의 GetData 작업에서 valueSpecified 속성을 수동으로 제거 할 수 있습니다.

+2

클라이언트 프록시가 나중에 재생성 될 필요가없는 경우에만 실행 가능한 해결 방법이 될 수 있습니다. 그렇지 않으면 매번 추가 된 매개 변수를 제거하기 위해 생성 된 모든 메서드 시그니처를 통과하는 것이 어려울 것입니다. –

1

정확한 질문은 here입니다.

.NET 2.0을 사용할 때 클라이언트 프록시에서 생성 될 여분의 부울 매개 변수를 피하는 또 다른 방법은 서비스 계약에서 RPC 스타일 Enconding (WCF 및 ASMX의 기본값은 문서 스타일 임)으로 전환하는 것입니다. .
클라이언트의 XmlSerializer를이 매개 변수가 항상 SOAP에 나타납니다 는 RPC 스타일 인코딩을 사용하는 경우 적용되는 SOAP 1.1 사양의 일부이기 때문에를 요청해야 할 것입니다 이런 식으로.

WCF에서는 서비스 또는 작업 수준에서 DataContractFormat 특성을 사용하여 인코딩 스타일을 지정할 수 있습니다.

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    [DataContractFormat(Style = OperationFormatStyle.Rpc)] 
    string GetData(int value); 
} 

SOAP에서 RPC 스타일과 문서 스타일 인코딩의 차이점에 대한 자세한 내용은 here입니다.

어떤 경우 든 기존 클라이언트와의 호환성을 손상시킬 수 있으므로 서비스 계약 변경의 영향을주의 깊게 고려하십시오.

관련 문제