我现在想实现,在winform控件里调用我的一个ws,并且用到了soaphead来进行安全验证,其实就是在里面加入用户名和密码。
  然后在前台给对应的ws代理的相应属性赋值。
  问题出在,我用一个简单的winform用相同的机制调用这个ws,可以成功,但是如果用到winform控件中的时候,我是把winform控件嵌入一个winform窗口里,但是,在我想把这个用户控件拖入窗口的时候,编译器提示我出现了“未通过安全验证”,这个提示是我在ws里进行验证的时候抛出的异常信息。
  请问,这是为什么?十万火急!!!

解决方案 »

  1.   

    我又测试了一下,发现只要是把winform用户控件嵌入使用,不管是嵌入到winform开始webform都会出现丢失参数的情况。这里,我是用到了一个soaphead来存储安全验证信息的。就是在ws的方法里本来有一个soap头,它应该能接受到ws代理里的soaphead属性的值,但是事与愿违!!
      

  2.   

    soapheaderpublic class AuthHeaderCS : SoapHeader 
    {
    public string Username;
    public string Password;
    }
    webservice的代码public class FeeApplyWS : System.Web.Services.WebService
    {
    public FeeApplyWS()
    {
    //CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的
    InitializeComponent();
    } public AuthHeaderCS sHeader;
    private FeeManageWS.FeeApplyService.RecordApply ra = new RecordApply();
    #region 组件设计器生成的代码

    //Web 服务设计器所必需的
    private IContainer components = null;

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    } /// <summary>
    /// 清理所有正在使用的资源。
    /// </summary>
    protected override void Dispose( bool disposing )
    {
    if(disposing && components != null)
    {
    components.Dispose();
    }
    base.Dispose(disposing);
    }

    #endregion          [WebMethod]
    [SoapHeader("sHeader", Direction=SoapHeaderDirection.In)]
                      //就是这个sheader取不到东西,但是如果是在winform里直接调用就可以取得到
    public void GetAllFeeType(ref DataSet ds)
    {
    try
    {
    WSValidate.I_AuthenticateUser(sHeader);
    ra.GetAllFeeType(ref ds);
    }
    catch(Exception err)
    {
    string ErrorMessage=err.Message;
    SoapException sErr=new SoapException(ErrorMessage,SoapException.ServerFaultCode);
    throw(sErr);
    }

    }
    }
      

  3.   

    可以参考下,微软SmartClinet的例子,IssueVisionhttp://www.microsoft.com/china/msdn/events/featureevents/2004/SmartClientSeminar/index.aspx
      

  4.   

    nga96你说的我不懂,请解释清楚点