Передача заголовка безопасности wsse с помощью dynamicserviceproxy
Я пытаюсь использовать этот сервис, который требует заголовок wsse как
<soapenv:Header>
<wsse:Security soapenv:actor="AppID" soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>domain1\UNM1</wsse:Username>
<wsse:Password wsse:Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">PWD1</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
Я создаю прокси динамически, как
string[] assemblyReferences = new string[3] { "System.Web.Services.dll", "System.Xml.dll", "Microsoft.Web.Services3.dll" };
CompilerParameters parms = new CompilerParameters(assemblyReferences);
CompilerResults results = provider1.CompileAssemblyFromDom(parms, unit1);
if (results.Errors.Count > 0)
{
foreach (CompilerError oops in results.Errors)
{
Console.WriteLine("========Compiler error============");
Console.WriteLine(oops.ErrorText);
}
return;
}
//Invoke the web service method
object o = results.CompiledAssembly.CreateInstance("DynamicServiceProxy.servicename");
//object o = results.CompiledAssembly.CreateInstance("DynamicServiceProxy.WebService");
Type t = o.GetType();
BindingFlags bf = BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.DeclaredOnly;
MethodInfo m = t.GetMethod("Methodname", bf);
stroutput = (string) m.Invoke(o, new object[].....
Как мне передать заголовок на это. Я провел некоторые исследования и установил WSE 3.0 и добавил ссылку на service3. Однако я не могу получить RequestSoapContext или метод clientcredential в т. client(o) генерируется из soaphttpclientprotocol, а не WebServicesClientProtocol, и это должно быть причиной всех проблем. Пожалуйста помоги.
Кроме того, поскольку генерация прокси динамически, не уверен, что я могу сделать как
MessageServiceWse client = new MessageServiceWse()
Также я не уверен насчет типа wsse. Как определить это. Просто отметить, что я использую VS 2010
Это мой первый опыт обслуживания, поэтому, пожалуйста, извините, если я допустил очевидную ошибку. Нужна помощь специалиста.
1 ответ
Изменена конечная точка для включения заголовка, так как он является общим для запроса.
<endpoint address="https://wsext.test.com/gfr/ext/test1/"
binding="basicHttpBinding" bindingConfiguration="GLEditServiceSOAP"
contract="test1.GLEditServicePort" name="GLEditServicePort">
<headers >
<wsse:Security s:actor="AppID" s:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<wsse:UsernameToken>
<wsse:Username>test1\testuserid</wsse:Username>
<wsse:Password wsse:Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</headers>
</endpoint>