2011-01-10 1 views
0

1의 정수를 나타내도록 생성된다WCF + WebService를 2 개 필드 I가 '내부'매개 변수 방법이 내 WCF 업무

[OperationContract] 
    PublishResult PublishEnrollmentProfile(
     string siteName, int methodId,... 
     ); 

I는 다음과 같은 서명 생성이 WCF 서비스 WebService에 참조를 생성하는 경우 :

[System.Web.Services.Protocols.SoapDocumentMethodAttribute("...", 
     RequestNamespace="...", ResponseNamespace="...", 
     Use=System.Web.Services.Description.SoapBindingUse.Literal, 
     ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] 
    [return: System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] 
    public PublishResult PublishEnrollmentProfile(
     [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] 
     string siteName, 
     int methodId, 
     [System.Xml.Serialization.XmlIgnoreAttribute()] 
     bool methodIdSpecified, ...) 
    { 
     object[] results = this.Invoke("PublishEnrollmentProfile", new object[] { 
        siteName, 
        deployServerName, 
        methodId, 
        methodIdSpecified, 
        deviceClass, 
        deviceName, 
        registrationCode}); 
     return ((PublishResult)(results[0])); 
    } 

당신은 대신 하나 개의 정수 매개 변수의 내가있어 2 볼 수 있습니다 (값이 지정된 경우 '마크) (값) 정수와 부울을.

괜찮습니까? 왜 두 번째 매개 변수 (bool)가 필요합니까?

고맙습니다.

+0

http://stackoverflow.com/questions/2284760/what-are-these-extra-parameters-in-my-asmx-proxy-methods를 참조하십시오. 이는 정상적이고 예상됩니다. –

답변

3

지정 "필드는 단지 구조체이다 선택적 매개 변수에 생성됩니다. (INT, 날짜, 진수 등). 이러한 모든 변수는 지정된 이름으로 생성 된 추가 변수가됩니다. 때문에

"지정 "필드는 선택적 매개 변수에서만 생성 된 경우, DataContract 내부에 PublishEnrollmentProfile 메서드에 대한 매개 변수를 배치하고 methodID의 DataMember 특성을 [DataMember (IsRequired = true)]로 설정하면 지정된 필드가 사라져야합니다. 예를 들어 그것을 그대로두고 싶다면

일부 샘플이있는 blog posting입니다.

업데이트

운영 계약이 있습니다. 이 메서드의 매개 변수는 선택 사항이 아닌 경우

[OperationContract] 
PublishResult PublishEnrollmentProfile(string siteName, int methodId,...); 

는 당신은 DataContract를 만들고 재정 OperationContract를 너무 좋아한다 :

{ 
    [OperationContract] 
    PublishResult PublishEnrollmentProfile(PublishEnrollmentProfileRequest request); 
} 

을 그리고 당신은이처럼 DataContract 있습니다.

[DataContract] 
public class PublishEnrollmentProfileRequest 
{ 
    private string _siteName; 
    [DataMember] 
    public string siteName 
    { 
     get; 
     set; 
    } 


    private int _methodId; 
    [DataMember(IsRequired=True)] 
    public int methodId 
    { 
     get; 
     set; 
    } 

    . 
    . 
    . 

} 

따라서 siteName 및 methodI 필드가있는 WCF 서비스로 전달되는 "요청"개체가 있습니다. 예를 들어 methodId가 필요하다면 "Specified"필드가 없어집니다.

+0

미안하지만 방법 자체의 매개 변수에 대해 이야기하고 있습니다. 추가 속성이 필요합니까? – Budda

+0

"int methodId"앞에 "[DataMember (IsRequired = true)]"를 추가했는데 다음 오류가 발생했습니다. 'DataMember'특성이이 선언 형식에서 유효하지 않습니다. 'property, indexer, field'선언에서만 유효합니다. – Budda

+0

이전 응답에서 제공된 예제. –