今天因为项目需要,客户那边提供的soap 1.1的webservice,而我们用dotnet core 3.0调用的时候费了不少精力,所以写笔记记录一下吧。
首先我们需要确定soap的版本,上面已经写到了我们客户提供的是soap 1.1,下面具体代码中会提到。
正式开始
-
添加服务引用,直接上图
添加服务引用
选择Microsoft WCF Web Service Reference Provider
-
因为客户提供的是wsdl文件,所以点击浏览找到那个wsdl文件,一路下一步,点完成,因为他连不到对方服务器,所以会慢一点,等一会就好
点击浏览
选择wsdl文件
点击下一步直到完成
-
开始修改代码,我们已经可以看到vs帮我们自动生成了Reference.cs文件,打开它,找到GetEndpoinstAddress并修改里面的IP地址和端口(这个是否需要改,要看你是否能够直接连到对方服务器,因为有的是需要走vpn或者其他映射才能连上对方服务器)
修改soap的ip和端口
-
找到IsOneWay把它改成false
IsOneWay改成false
-
找到GetDefaultEndpoinstAddress()把private修改为public,因为一会我们要用到它
修改GetDefaultEndpoinstAddress
-
这个时候打开你项目的csproj文件,红框中标记出来的几个包默认版本比较老vs在编译的时候会报错,按照要求直接改吧
修改引用包的版本
-
接下来直接上代码了
//注意两个element的顺序,弄反了会报错的
var binding = new CustomBinding(new TextMessageEncodingBindingElement
{
//我们调用的soap是1.1,这里要选用Soap11,否则默认是1.2,会报错
MessageVersion = MessageVersion.Soap11
},new HttpTransportBindingElement
{
//认证模式
AuthenticationScheme = AuthenticationSchemes.Basic
});
TestService.model _model = new TestService.model ();
TestService.service _client =
new TestService.service(binding,
TestService.service.GetDefaultEndpointAddress());//这里就是刚才我们为什么要修改private为public的原因
_client .ClientCredentials.UserName.UserName = "user";//账号
_client .ClientCredentials.UserName.Password = "pass";//密码
_model .name= "user001";
_model .sex= "人妖";
_model .age= 10;
await _client .SaveUserAsync(_model);
至此,所有工作就全部完成了,去对方系统里看看吧,数据已经发过去了。
网友评论