Расширение мыла веб-службы 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.