在 VS2019 中卡在与 WSDL 的连接上

Stuck on connection to WSDL in VS2019

我已经尝试了上百万种方法,我可能已经把自己弄糊涂了,以至于感到非常沮丧。就 WSDL 而言,我是一个初学者。 运行 通过计算器教程。 手头的任务是连接到来自丹麦国家部门的 WSDL Web 服务。 (因为地址是公开的,所以我认为没有理由隐藏它们。) 我已经确认 Soap Web 服务正在运行,并且可以按照部门的指南使用 SoapUI 5.5.0 正常运行。 首先,我一直试图做的是创建一个非常简单的带有硬编码信息的控制台应用程序,只是为了测试 C# 代码/工作流。最终产品将成为 MVC .Net 或 Blazor 服务器。 我已经从代码和请求信息中删除了用户名和密码,请求信息是字符串格式的 10 位代码。它们已被替换为“......”。

这是 wsdl 地址:https://ws.fvst.dk/service/CHR_dyrWS?WSDL

我收集的所有信息。使用 webservice 的步骤是通过连接的服务添加它并实例化它,添加用户信息并调用 webservice 中的请求函数,最后将配置固定为使用身份验证。 但无论我做什么,似乎我都无法让它工作,它会抛出验证错误或 Security.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>

我真的很想知道我需要从这里去哪里。我真的不确定我是否连接到网络服务错误?我最不确定的是您需要连接到此 Web 服务的方式。

任何帮助或链接将不胜感激!

亲切的问候

我想通了。我也需要在 soap 请求中发送可选信息。 我需要在 app.config 文件中指定一个 header。

为了让它工作,我在 http 日志中从 SoapUI 复制了 header 信息。 将其粘贴到 app.config 中的 header 信息中。用户名令牌可以删除并且仍然有效。

The entire program code

Config file

Console output