我已经尝试了无数种方法,我可能已经把自己弄糊涂了,以至于太沮丧了。我是WSDL方面的初学者。浏览计算器教程。手头的任务是连接到来自丹麦政府部门的WSDL Web服务。(由于这些地址是公开的,所以我认为没有理由隐藏它们。(我已经通过使用SoapUI 5.5.0,并遵循部门的指导,确认Soap Web服务正在运行。首先,我一直在尝试创建一个具有硬编码信息的非常简单的控制台应用程序,只是为了测试C#代码/工作流。最终的产品要么是MVC。Net或Blazor服务器。我已经从代码和请求信息中删除了用户名和密码,这是一个字符串格式的10位代码。它们已被替换为"……"&";。
这是wsdl地址:https://ws.fvst.dk/service/CHR_dyrWS?WSDL
我收集到的所有信息。使用Web服务的步骤是通过连接的服务添加并实例化它,添加用户信息并调用Web服务中的请求函数,最后将配置固定为使用身份验证。但无论我做什么,我似乎都无法使其工作,它会抛出验证错误或安全性。MessageSecurityException。
我目前有的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Text;
using System.Threading.Tasks;
using ConsoleApp5.ServiceReference1;
namespace ConsoleApp5
{
class Program
{
static void Main(string[] args)
{
CHR_dyrWSClient client = new CHR_dyrWSClient();
var basicHttpBinding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential);
basicHttpBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
client.ClientCredentials.UserName.UserName = ".....";
client.ClientCredentials.UserName.Password = ".....";
ServiceReference1.CHR_dyrHentCkrOplysningerRequest requestInfo = new ServiceReference1.CHR_dyrHentCkrOplysningerRequest();
requestInfo.Request.CkrNr = ".....";
var responseInfo = client.hentCkrOplysninger(requestInfo);
Console.WriteLine(responseInfo.Response);
client.Close();
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<system.serviceModel>
<bindings>
<basicHttpsBinding>
<binding name="CHR_dyrWSPortBinding">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
</security>
</binding>
</basicHttpsBinding>
</bindings>
<client>
<endpoint
address="https://ws.fvst.dk:443/service/CHR_dyrWS"
binding="basicHttpsBinding"
bindingConfiguration="CHR_dyrWSPortBinding"
contract="ServiceReference1.CHR_dyrWS"
name="CHR_dyrWSPort" />
</client>
</system.serviceModel>
</configuration>
我真的很想知道从这里我需要去哪里。我真的不确定我是否连接错了网络服务?我最不确定的是你需要如何连接到这个网络服务。
任何帮助或链接都将不胜感激!
问候
我已经想通了。我也需要在soap请求中发送可选信息。我需要在app.config文件中指定一个标头。
为了使它发挥作用,我从http日志中的SoapUI复制了头信息。已将其粘贴到app.config中的标头信息中。用户名令牌可以删除,并且仍然有效。
整个程序代码
配置文件
控制台输出