.net 调用Java Webservice 例子
2012-09-26 13:20
525 查看
一、前提
1.Java Webservice使用的cxf webservice框架生成,使用了usernameToken方式的ws-security用户安全认证
2..net客户端采用WCF方式调用
二、说明
使用soapUI进行调试,得到Post包格式如下:
三、代码
客户端WCF调用代码
app.config wcf配置
1.Java Webservice使用的cxf webservice框架生成,使用了usernameToken方式的ws-security用户安全认证
2..net客户端采用WCF方式调用
二、说明
使用soapUI进行调试,得到Post包格式如下:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.weather.api.ceair.com/"> <soapenv:Header> <wsse:Security 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>ceair_api</wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">ceair_api</wsse:Password> </wsse:UsernameToken> </wsse:Security> </soapenv:Header> <soapenv:Body> <ser:getCityWeatherAll> <!--Optional:--> <arg0>上海</arg0> <!--Optional:--> <arg1>?</arg1> <arg2>?</arg2> </ser:getCityWeatherAll> </soapenv:Body> </soapenv:Envelope>
三、代码
using System; using System.ServiceModel.Description; using System.ServiceModel; using System.ServiceModel.Dispatcher; using System.ServiceModel.Channels; using System.Xml; using System.ServiceModel.Configuration;
public class CustomBehavior : Attribute, IEndpointBehavior { #region IEndpointBehavior Members public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters) { } public void ApplyClientBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.ClientRuntime clientRuntime) { var clientCredentials = endpoint.Behaviors.Find<ClientCredentials>(); if (clientCredentials != null) { var inspector = new CustomClientMessageInspector(clientCredentials.UserName.UserName, clientCredentials.UserName.Password); clientRuntime.MessageInspectors.Add(inspector); } } public void ApplyDispatchBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher) { } public void Validate(ServiceEndpoint endpoint) { } #endregion }
public class CustomBehaviorExtensionElement : BehaviorExtensionElement { protected override object CreateBehavior() { return new CustomBehavior(); } public override Type BehaviorType { get { return typeof(CustomBehavior); } } }
class CustomMessageHeader : MessageHeader { private const string PREFIX_SEC = "wsse"; private const string PREFIX_SOAP = "soapenv"; private const string NAMESPACE_SEC = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; private const string NAMESPACE_SOAP = "http://schemas.xmlsoap.org/soap/envelope/"; public string UserName { get; private set; } public string Password { get; private set; } public CustomMessageHeader(string userName, string password) { UserName = userName; Password = password; } protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion) { base.OnWriteStartHeader(writer, messageVersion); } protected override void OnWriteStartHeader(System.Xml.XmlDictionaryWriter writer, MessageVersion messageVersion) { writer.WriteStartElement(PREFIX_SOAP, "Header", NAMESPACE_SOAP); //Security writer.WriteStartElement(PREFIX_SEC, "Security", NAMESPACE_SEC); writer.WriteAttributeString(PREFIX_SOAP, "mustUnderstand", NAMESPACE_SOAP, "1"); writer.WriteXmlnsAttribute(PREFIX_SEC, NAMESPACE_SEC); writer.WriteXmlnsAttribute(PREFIX_SOAP, NAMESPACE_SOAP); //UsernameToken writer.WriteStartElement(PREFIX_SEC, "UsernameToken", NAMESPACE_SEC); //Username writer.WriteElementString(PREFIX_SEC, "Username", NAMESPACE_SEC, UserName); //Password writer.WriteStartElement(PREFIX_SEC, "Password", NAMESPACE_SEC); writer.WriteAttributeString("Type", @"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"); writer.WriteValue(Password); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndElement(); } public override string Name { get { return "Security"; } } public override string Namespace { get { return NAMESPACE_SEC; } } }
public class CustomClientMessageInspector : IDispatchMessageInspector, IClientMessageInspector { public string UserName { get; private set; } public string Password { get; private set; } public CustomClientMessageInspector() { } public CustomClientMessageInspector(string userName, string password) { UserName = userName; Password = password; } #region Message Inspector of the Service public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) { return null; } public void BeforeSendReply(ref Message reply, object correlationState) { } #endregion #region Message Inspector of the Consumer public void AfterReceiveReply(ref Message reply, object correlationState) { } public object BeforeSendRequest(ref Message request, IClientChannel channel) { MessageHeader header = new CustomMessageHeader(UserName, Password); request.Headers.Add(header); return null; } #endregion }
客户端WCF调用代码
ServiceReference1.WeatherServiceV2Client client = new ServiceReference1.WeatherServiceV2Client(); client.ClientCredentials.UserName.UserName = "ceair_api"; client.ClientCredentials.UserName.Password = "ceair_api"; var weather = client.getCityWeatherAll("上海", "", false);
app.config wcf配置
<system.serviceModel> <bindings> <basicHttpBinding> <binding name="WeatherServiceV2ImplServiceSoapBinding" /> </basicHttpBinding> </bindings> <client> <endpoint address="http://172.20.32.145:8080/ceair-api/weather" behaviorConfiguration="clientInspectorsAdded" binding="basicHttpBinding" bindingConfiguration="WeatherServiceV2ImplServiceSoapBinding" contract="ServiceReference1.WeatherServiceV2" name="WeatherServiceV2ImplPort" /> </client> <behaviors> <endpointBehaviors> <behavior name="clientInspectorsAdded"> <clientInterceptors /> </behavior> </endpointBehaviors> </behaviors> <extensions> <behaviorExtensions> <add name="clientInterceptors" type="JavaWebServiceCaller.CustomBehaviorExtensionElement, JavaWebServiceCaller, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> </behaviorExtensions> </extensions> </system.serviceModel>
相关文章推荐
- java 客户端调用 .net webservice 添加
- java远程调.net webservice例子
- Delphi 调用JAVA WebService 操作数据库登录的例子
- Java WebService例子--------调用www.36wu.com查询IP地址
- .NET 调用java webservice保存datetime类型数据为空的解决办法
- Java调用.NetWeb Service
- java 调用 .net webservice
- Java 调用 .Net Web Service 问题解决方法分享
- 2009-05-24技术学习:Java中使用Axis调用.Net WebService
- java 调用.net web service
- java 调用 .net webservice 示例
- java 调用 .net WebService
- java 调用.net webservice
- xfire java调用 .NET webservice 方法返回值是[#document: null]
- Java 调用 .net Webservice的一些问题和注意事项
- VB.NET客户端调用Axis的Java Web Service实现文件上传
- 调试通过的android手机调用网上.net web service的例子
- java 调用 .net webservice 示例
- Delphi 调用JAVA WebService例子
- C# ASP.NET Webservice调用外部exe无效的解决方法