群里问的一个问题 C# 调用java写的WebService返回信息,之前他一直没调用成功。返回的是worng soap header 错误。
参考别人的代码然后自己有改了下。代码少多了。
java webservice在VS2013中引用步骤:
1:鼠标右键点击项目的引用 =》选择添加服务引用
把要调用的服务地址输入:例如http://218.242.22.128:8080/portalService/services/transServer?wsdl 然后点击转到
然后点击确定
Reference.cs 里面就有要调用的服务里面的所有方法了。
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.18408
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace NetCallJavaWebService.CallJavaService {
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(Namespace="http://webService.htdata.com/",
ConfigurationName="CallJavaService.IWebService")]
public interface IWebService {
// CODEGEN: 参数“ResponseDto”需要其他方案信息,使用参数模式无法捕获这些信息。特定特性为“System.Xml.Serialization.XmlElementAttribute”。
[System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
[System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
[return: System.ServiceModel.MessageParameterAttribute(Name="ResponseDto")]
NetCallJavaWebService.CallJavaService.doTransResponse doTrans(NetCallJavaWebService.CallJavaService.doTrans request);
[System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
System.Threading.Tasks.Task<NetCallJavaWebService.CallJavaService.doTransResponse>
doTransAsync(NetCallJavaWebService.CallJavaService.doTrans request);
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18408")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://webService.htdata.com/")]
public partial class requestDto : object, System.ComponentModel.INotifyPropertyChanged {
private string bizCdField;
private string reqBodyField;
private string reqSeqField;
private string reqTmsField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
public string bizCd {
get {
return this.bizCdField;
}
set {
this.bizCdField = value;
this.RaisePropertyChanged("bizCd");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
public string reqBody {
get {
return this.reqBodyField;
}
set {
this.reqBodyField = value;
this.RaisePropertyChanged("reqBody");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)]
public string reqSeq {
get {
return this.reqSeqField;
}
set {
this.reqSeqField = value;
this.RaisePropertyChanged("reqSeq");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)]
public string reqTms {
get {
return this.reqTmsField;
}
set {
this.reqTmsField = value;
this.RaisePropertyChanged("reqTms");
}
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName) {
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18408")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://webService.htdata.com/")]
public partial class responseDto : object, System.ComponentModel.INotifyPropertyChanged {
private string bizCdField;
private string reqSeqField;
private string rspBodyField;
private string rspCdField;
private string rspDescField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
public string bizCd {
get {
return this.bizCdField;
}
set {
this.bizCdField = value;
this.RaisePropertyChanged("bizCd");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
public string reqSeq {
get {
return this.reqSeqField;
}
set {
this.reqSeqField = value;
this.RaisePropertyChanged("reqSeq");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)]
public string rspBody {
get {
return this.rspBodyField;
}
set {
this.rspBodyField = value;
this.RaisePropertyChanged("rspBody");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)]
public string rspCd {
get {
return this.rspCdField;
}
set {
this.rspCdField = value;
this.RaisePropertyChanged("rspCd");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=4)]
public string rspDesc {
get {
return this.rspDescField;
}
set {
this.rspDescField = value;
this.RaisePropertyChanged("rspDesc");
}
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName) {
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(WrapperName="doTrans",
WrapperNamespace="http://webService.htdata.com/", IsWrapped=true)]
public partial class doTrans {
[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://webService.htdata.com/", Order=0)]
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public NetCallJavaWebService.CallJavaService.requestDto requestDto;
public doTrans() {
}
public doTrans(NetCallJavaWebService.CallJavaService.requestDto requestDto) {
this.requestDto = requestDto;
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(WrapperName="doTransResponse",
WrapperNamespace="http://webService.htdata.com/", IsWrapped=true)]
public partial class doTransResponse {
[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://webService.htdata.com/", Order=0)]
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public NetCallJavaWebService.CallJavaService.responseDto ResponseDto;
public doTransResponse() {
}
public doTransResponse(NetCallJavaWebService.CallJavaService.responseDto ResponseDto) {
this.ResponseDto = ResponseDto;
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public interface IWebServiceChannel : NetCallJavaWebService.CallJavaService.IWebService,
System.ServiceModel.IClientChannel {
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class WebServiceClient : System.ServiceModel.ClientBase
<NetCallJavaWebService.CallJavaService.IWebService>,
NetCallJavaWebService.CallJavaService.IWebService {
public WebServiceClient() {
}
public WebServiceClient(string endpointConfigurationName) :
base(endpointConfigurationName) {
}
public WebServiceClient(string endpointConfigurationName, string remoteAddress) :
base(endpointConfigurationName, remoteAddress) {
}
public WebServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
base(endpointConfigurationName, remoteAddress) {
}
public WebServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
base(binding, remoteAddress) {
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
NetCallJavaWebService.CallJavaService.doTransResponse NetCallJavaWebService.CallJavaService.IWebService.
doTrans(NetCallJavaWebService.
CallJavaService.doTrans request) {
return base.Channel.doTrans(request);
}
public NetCallJavaWebService.CallJavaService.responseDto doTrans(NetCallJavaWebService.
CallJavaService.requestDto requestDto) {
NetCallJavaWebService.CallJavaService.doTrans inValue = new NetCallJavaWebService.CallJavaService.doTrans();
inValue.requestDto = requestDto;
NetCallJavaWebService.CallJavaService.doTransResponse retVal =
((NetCallJavaWebService.CallJavaService.IWebService)(this)).doTrans(inValue);
return retVal.ResponseDto;
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
System.Threading.Tasks.Task<NetCallJavaWebService.CallJavaService.doTransResponse>
NetCallJavaWebService.CallJavaService.IWebService.doTransAsync
(NetCallJavaWebService.CallJavaService.doTrans request) {
return base.Channel.doTransAsync(request);
}
public System.Threading.Tasks.Task<NetCallJavaWebService.CallJavaService.doTransResponse> doTransAsync
(NetCallJavaWebService.CallJavaService.requestDto requestDto) {
NetCallJavaWebService.CallJavaService.doTrans inValue = new NetCallJavaWebService.CallJavaService.doTrans();
inValue.requestDto = requestDto;
return ((NetCallJavaWebService.CallJavaService.IWebService)(this)).doTransAsync(inValue);
}
}
}
OK 然后再去web.config里面配置登陆验证信息
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="WebServicImplServiceSoapBinding" />
</basicHttpBinding>
</bindings>
<client>
//标红代码是添加服务引用自带追加的
<endpoint address="http://218.242.22.128:8080/portalService/services/transServer"
binding="basicHttpBinding" bindingConfiguration="WebServicImplServiceSoapBinding"
contract="CallJavaService.IWebService" name="WebServicImplPort">
<!--数据交互 用户名和密码安全检查-->
//配置登陆用户名和密码
<headers>
<checkHeader>
<userId>test1</userId>
<userPass>123456789</userPass>
</checkHeader>
</headers>
</endpoint>
</client>
</system.serviceModel>
C#代码:
protected void Button1_Click(object sender, EventArgs e)
{
java webservice 的标准
//<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
//<soap:Header><checkHeader><userId>shenghetong</userId>
//<userPass>shenghetong123</userPass></checkHeader></soap:Header>
//<soap:Body><ns2:doTrans xmlns:ns2="http://webService.htdata.com/"><requestDto>
//<bizCd>cardInfoQuery</bizCd>
//<reqBody>dxHDkYKAI8ENS0vp6H2r+IsxQAc6Lt3RtS+kbl9x20tu3an1XZkuI2jBd6H8NVlwAXB3xr5ID5M=</reqBody>
//<reqSeq>qd111111111</reqSeq><reqTms>99999999111111</reqTms></requestDto></ns2:doTrans></soap:Body></soap:Envelope>
//<soap:Header><checkHeader><userId>shenghetong</userId>
//<userPass>shenghetong123</userPass><eckHeader></soap:Header>
//环境访问WSDL地址 http://218.242.22.128:8080/portalService/services/transServer?wsdl
string result = "wrong!";
try
{
CallJavaService.WebServiceClient hf = new CallJavaService.WebServiceClient();
CallJavaService.requestDto rqst = new CallJavaService.requestDto();
rqst.reqSeq = "qd111111111";
rqst.bizCd = "cardInfoQuery";
rqst.reqBody = "dxHDkYKAI8ENS0vp6H2r+IsxQAc6Lt3RtS+kbl9x20tu3an1XZkuI2jBd6H8NVlwAXB3xr5ID5M=";
rqst.reqTms = "99999999111111";
result = hf.doTrans(rqst).rspCd + "<br/>"
+ hf.doTrans(rqst).rspDesc + "<br/>"
+ hf.doTrans(rqst).rspBody;
Response.Write(result);
}
catch (Exception ex)
{
System.IO.File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + "wrong.log", ex.Message);
}
}
返回信息:
0000succes!
JKWGMHn0XKZJhZZtjXKX2++g4HoR+1YGuzLDXwPYd8z2y1a0Vng6c7R/x2IvsRMjqurBrYZ2lJltuC2SlBL28wFqqUQccuH2Pa1JjM0MSqbyja9T/ggDUwPOFZYoJ9we97qByZivKOzmK9dITyNiGWoopZsWZcwjWV3L/YK9LAPlK8v1/7qTXD+sJER9ZyE84SY8AveiQlAUcHmrKW92l2go5fgpo9+E
到这来就C# 调用java webservice 结束了。
参考:
http://blog.csdn.net/yenange/article/details/5824967
http://www.cnblogs.com/huashanlin/archive/2008/06/30/1232315.html