.net 客户端调用java或.net webservice进行soapheader验证
最近项目中有业务需要跨平台调用web服务,客户端和服务器之间采用非对称加密来保证数据的安全性,webservice的安全验证基于soapheader。
借此机会,顺便整理一下调用.net webservice 和 java webservice 的验证方式,记录下来。
.net端web服务
1.若web服务是采用.net webservice实现,如下代码:
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。
// [System.Web.Script.Services.ScriptService]
public class externalWebService : System.Web.Services.WebService
{ public WebServiceSecurityHeader webServiceSecurityHeader = new WebServiceSecurityHeader(); BizTcmCmdrugsOrg bizTcmCmdrugsOrg = new BizTcmCmdrugsOrg(); [WebMethod,SoapHeader("webServiceSecurityHeader")]
public string HelloWorld(string name)
{
if (SecurityValidate())
{
return "安全的服务: " + name;
}
else
{
return "对不起,无权访问!";
}
} private bool SecurityValidate() { if (webServiceSecurityHeader.SecurityKey == null)
{
return false;
} if (webServiceSecurityHeader.SecurityKey.Equals(""))
{
return true;
}
else
{
return false;
}
}
2. java环境,webservice采用cxf 实现:
JAVA端web服务
a.具体 java 端 cxf 的web服务的实现如下图。
CXF配置:
b.定义拦截器:
.net端的webservice代理类和客户端代码:
1.C#引用java的webservice跟引用C#的webservice一样,引用URL就可以使用了,但是C#引用java的webservice不会自动生成soapheader,需要自己添加。
2.建立soapheader类
3. Reference.cs代理类中默认不会生成soapheader相关代码,要手动添加。有个问题,由于reference.cs中的代码是引用web服务时自动生成的,所以你添加了代码后,若重新更新引用的webservice,手工增加的代码会被清除,需要再次添加,这是个坑。
代理方法增加SoapHeader属性
4.客户端调用代码:
上面是.net调用 java web服务进行 soapheader 验证的主要过程,在以下环境中测试通过:
.net环境: win10,vs2015,
java环境:java8,cxf3.1.12,spring boot 1.5.13