C# SOAP头:Flex和C之间的安全通信#
我正在使用Flex、Webservices和C#,我希望通过SOAP保护对web服务的访问 我花了两天时间解决这个问题: 我描述我的webmethod的asmx文件:C# SOAP头:Flex和C之间的安全通信#,c#,apache-flex,security,web-services,soapheader,C#,Apache Flex,Security,Web Services,Soapheader,我正在使用Flex、Webservices和C#,我希望通过SOAP保护对web服务的访问 我花了两天时间解决这个问题: 我描述我的webmethod的asmx文件: public ServiceAuthHeader CustomSoapHeader = new ServiceAuthHeader(); [SoapHeader("CustomSoapHeader")] [WebMethod(Description = "Return Somme")] publ
public ServiceAuthHeader CustomSoapHeader = new ServiceAuthHeader();
[SoapHeader("CustomSoapHeader")]
[WebMethod(Description = "Return Somme")]
public int getTotal(int x, int y)
{
ServiceAuthHeaderValidation.Validate(CustomSoapHeader);
var total = x+y;
return total;
}
public class ServiceAuthHeader : SoapHeader
{
// SoapHeader for authentication
public string Username;
public string Password;
}
然后我写了一个类来检查
SOAP头的内容是
好
}
到目前为止,我认为我是对的
但是,虽然我想在Flex中实现它:
var q1:QName=new QName("http://localhost:59399/Service1.asmx?wsdl", "Header1");
header1=new SOAPHeader(q1, {String:"JOE",String JOE});
_serviceControl.addHeader(header1);
我的用户名上有一个NullReferenceException,它似乎不可用
我的Web服务工作正常,除非我尝试实现:
ServiceAuthHeaderValidation.Validate(CustomSoapHeader);
有人能给我回信,以便知道遗漏了什么吗?或者是我的错误
谢谢你抽出时间
到目前为止,StackoverFlow通过阅读不同的答案帮助了我很多,但今天我仍然坚持下去。如果有人能帮忙的话。我只使用自定义XML:
public function addUserCredentials(username:String, passwordHash:String):ISoapInvocation
{
var headerDetails:XML =
<Security xmlns={wsse}>
<UsernameToken>
<Username>{username}</Username>
<Password>{passwordHash}</Password>
</UsernameToken>
</Security>;
securityHeader = new SOAPHeader(securityQName, headerDetails);
return this;
}
public函数addUserCredentials(用户名:String,密码hash:String):ISoapInvocation
{
var headerDetails:XML=
{username}
{passwordHash}
;
securityHeader=新的SOAPHeader(securityQName,headerDetails);
归还这个;
}
请记住,在E4X定义中使用{}看起来像是一个更新的绑定,而不是。非常感谢,Sophistifunk 我最后添加了我的生成为子类
var header1:SOAPHeader;
var q1:QName = new QName("http://localhost:80/", "Header");
header1 = new SOAPHeader(q1, {});
var a:XML = <AuthHeader xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://localhost:80/">
<UserLogin>Joe</UserLogin>
<mdp>test</mdp>
</AuthHeader>
header1.content = a;
_serviceControl.addHeader(header1);
var头1:SOAPHeader;
变量q1:QName=新的QName(“http://localhost:80/“,”标题“);
header1=新的SOAPHeader(q1,{});
变量a:XML=
乔
试验
header1.content=a;
_serviceControl.addHeader(header1);
但是,当我们通过Flex4的IDE在Flex4中实现一个新的Web服务时,所有内容都是在AS中生成的
但是管理页眉的方法真的很糟糕
它将自动负责安全标头。。我的意思是创建一个函数setLogin或setpassword,可从或mxml应用程序绑定
无论如何
如果有人知道一种更好的方法来管理SOAP的头。你的Flex代码没有给我太多的东西。您是否在QName组件中使用WebService标记?您读过关于从Flex向Soap请求添加头的文档吗?
var header1:SOAPHeader;
var q1:QName = new QName("http://localhost:80/", "Header");
header1 = new SOAPHeader(q1, {});
var a:XML = <AuthHeader xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://localhost:80/">
<UserLogin>Joe</UserLogin>
<mdp>test</mdp>
</AuthHeader>
header1.content = a;
_serviceControl.addHeader(header1);