2009-09-09 6 views
0

J'ai un problème, je veux mettre l'attribut d'extension de savon dans la méthode Web: extension de savon en service Web:Appel d'une méthode avec un SoapExtensionAttribute

public class EncryptMessageAttribute : SoapExtensionAttribute 
{ 
    private string strKey="null"; 

    public void setKey(string s) 
    { 
     strKey=s; 
    } 
} 

classe d'extension de savon:

public class EncryptMessage : SoapExtension 
{ 
.... 
} 

extension savon sur la méthode Web:

public class Service1 : System.Web.Services.WebService 
{ 
    public string k; 

    [WebMethod] 
    [EncryptMessageAttribute(setKey(k))] 
    public string test2() 
    { 
     return "ok"; 
    } 

    [WebMethod] 
    [EncryptMessage(setKey(k))] 
    public string test2() 
    { 
     return "ok"; 
    } 
} 

Il finir avec cette compilation erreur:

Error 1 The name 'setKey' does not exist in the current context Error 2 An object reference is required for the non-static field, method, or property

Mise à jour 1:

J'ai essayé:

public class Service1 : System.Web.Services.WebService 
{ 
    public const string strAttribute = "something"; 

    [WebMethod] 
    [EncryptMessage SetKey =strAttribute)] 
    public string test2() 
    { 
     return "ok"; 
    } 
} 

Il fonctionne. Mais je veux changer l'attribut avant la méthode web de l'appel client, c'est possible, ou l'attribut doit être const? Par exemple, public string strAttribute ne fonctionne pas.

Mise à jour 2:

J'ai une autre question:

Je classe, avec num variable:

public class EncryptMessage : SoapExtension 
{ 
    public int num=10; 
    .... 
} 

extension de savon sur la méthode Web:

public class Service1 : System.Web.Services.WebService 
{ 
    public const string k = "something"; 

    /*in this place I want call some methods, which change variable num in class 
     EncryptMessage, 
     before that is soap extension used on web method .. it is possible ? 
     If yes, how can I change variable in class EncryptMessage 
    */ 

    int num2 = 5; 
    someMethods(num2); // this methods change variable num in class EncryptMessage 

    [WebMethod] 
    [EncryptMessage(SetKey =k)] 
    public string test2() 
    { 
     return "ok"; 
    } 
} 

Répondre

1

Vous ne pouvez pas appeler une méthode sur l'attribut comme vous « Re faire

utiliser une propriété, pas une méthode:

public class EncryptMessageAttribute : SoapExtensionAttribute 
{ 
    private string strKey="null"; 

    public string Key 
    { 
     get { return strKey; } 
     set { strKey = value; } 
    } 
} 

[WebMethod] 
[EncryptMessageAttribute(Key = "null")] 
public string test2() 
{ 
    return "ok"; 
} 
+0

Thx, essayez: public class Service1: System.Web.Services.WebService { const string publique strAttribute = "quelque chose" ; [WebMethod] [EncryptMessage (XPathEncryption = "// soap: body/*/*", SetKey = strAttribute)] test2 chaîne publique() { retour "ok"; } } Mais je veux changer l'attribut avant la méthode web d'appel client, c'est possible? Ou l'attribut doit être const? –

+0

Oui, ça doit être constant. Les attributs ne sont que des métadonnées, vous ne pouvez pas modifier leurs données lors de l'exécution. Il est clair qu'un attribut n'est pas la solution appropriée dans votre cas ... –

+0

Comment puis-je définir une variable dans la classe EncryptMessage: SoapExtension, avant que l'extension soap soit utilisée sur la méthode web? –

Questions connexes