ヘッダー認証が必要な Web サービスを動的に呼び出そうとしていますが、必要なヘッダー資格情報を渡す方法がわかりません
私のコード:
public object[] GeneratewebserviceProxy(string WSDL)
{
WebRequest webRequest = WebRequest.Create(WSDL);
System.IO.Stream requestStream = webRequest.GetResponse().GetResponseStream();
ServiceDescription description = ServiceDescription.Read(requestStream);
string sdName = description.Services[0].Name;
string Method_Name = description.Messages["LoginSoapIn"].Name.Replace("Request", "");
Method_Name = Method_Name.Replace("SoapIn", "");
ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
importer.ProtocolName = "Soap";
importer.AddServiceDescription(description, null, null);
CodeNamespace nmspace = new CodeNamespace();
CodeCompileUnit unit1 = new CodeCompileUnit();
unit1.Namespaces.Add(nmspace);
ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit1);
object[] objRet = null;
if (warning == 0)
{
CodeDomProvider provider1 = new CSharpCodeProvider();
string[] assemblyReferences = new string[3]{ "System.Web.Services.dll", "System.Xml.dll", "System.Data.dll" };
CompilerParameters parms = new CompilerParameters(assemblyReferences);
CompilerResults results = CodeDomProvider.CreateProvider("CSharp").CompileAssemblyFromDom(parms, unit1);
object o = results.CompiledAssembly.CreateInstance(sdName);
Type t = o.GetType();
//PropertyInfo credentials = t.GetProperty("Credentials");
//PropertyInfo credentials = t.GetProperty("Credentials");
// credentials.SetValue(o, new NetworkCredential(username, passwd), null);
MethodInfo m = t.GetMethod("Invoke", BindingFlags.NonPublic | BindingFlags.Instance);
object[] webmethod_param = { "UserName", "Password" };
object[] objParams = { Method_Name, webmethod_param };
objRet = (object[])m.Invoke(o, objParams);
if (objRet.Length > 0)
{
objRet = (object[])objRet[0];
}
}
return objRet;
}
リクエストは次のようになります。
tem:AuthHeader>
<tem:Username>UserName</tem:Username>
<tem:Password>Password</tem:Password>
</tem:AuthHeader
資格情報を渡すために両方の方法を試しましたが (コードで確認できるように)、何も機能していないようです。