Расширение мыла веб-службы ASMX - как внедрить атрибут в класс прокси-клиента?

Я пытаюсь установить атрибуты расширения мыла на стороне клиента. Например:

Реализация в веб-сервисе:

[AttributeUsage(AttributeTargets.Method)]
public class EncryptMessageAttribute : SoapExtensionAttribute
{
    private string strKey="null";

    public string StrKey
    {
        get {  return strKey; }

        set { strKey = value; }    
    }
}

Класс расширения мыла:

public class EncryptMessage : SoapExtension
{
...
}

Используется в веб-методе:

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

Реализация в классе Proxy:

[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/test", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
[EncryptMessage( StrKey = "pass")]
public string test() {
    object[] results = this.Invoke("test", new object[0]);
    return ((string)(results[0]));
}

Атрибутами расширения мыла являются: [[EncryptMessage (StrKey = "pass")]

Я хочу установить атрибут расширения Soap на стороне клиента, прежде чем использовать расширение Soap, когда я вызываю некоторые веб-методы.

Пример: я вызываю некоторый метод, который устанавливает атрибуты расширения мыла на обеих сторонах, прежде чем использовать расширение мыла. Кто-нибудь может мне помочь?

1 ответ

Прежде всего, если вы можете использовать WCF для этого, то вам следует. Microsoft заявила, что веб-сервисы ASMX являются "устаревшей технологией", и что все новые разработки веб-сервисов должны использовать WCF.

В любом случае, смотрите классы SoapExtensionReflector и SoapExtensionImporter. Обратите внимание, что они будут работать только для клиентов.NET, ASMX.

Другие вопросы по тегам