首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dynamicserviceproxy传递wsse安全标头

使用dynamicserviceproxy传递wsse安全标头
EN

Stack Overflow用户
提问于 2013-03-20 04:42:36
回答 1查看 892关注 0票数 0

我正在尝试使用这个需要wsse头的服务,就像

代码语言:javascript
复制
   <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>

我将动态创建代理,如下所示

代码语言:javascript
复制
    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[].....

我如何将头传递给它。我做了一些研究,安装了WSE3.0,并为service3添加了参考。但是,我无法在t中获得RequestSoapContext或client client方法。client(o)是从soaphttpclientprotocol而不是WebServicesClientProtocol生成的,这应该是所有问题的原因。请帮帮忙。

另外,由于动态生成代理,我不确定我是否可以这样做

代码语言:javascript
复制
       MessageServiceWse client = new MessageServiceWse()

另外,我也不确定wsse类型。如何定义它。请注意,我使用的是VS2010

这是我的第一次服务经验,所以如果我犯了一些明显的错误,请原谅。需要专家的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-02 03:37:17

已更改终结点以包括标头,因为它在请求中是常见的。

代码语言:javascript
复制
  <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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15510035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档