ChatGPT解决这个技术问题 Extra ChatGPT

c# Soap 客户端问题 - 发现合约的多个端点配置

我正在尝试编写一个简单的 c# 控制台应用程序来从这里测试 SOAP API:https://www.imailtest.co.uk/webservice/imail_api.asmx?wsdl(或 https://www.imailtest.co.uk/webservice/imail_api.asmx 以查看 api 方法)

因此,我添加了此参考并尝试对其调用 2 个 api 方法(Authentiacate 和 ProcessPrintReadyPDF)并收到此错误:

错误:无法加载合同“ServiceReference1.imail_apiSoap”的端点配置部分,因为找到了多个端点配置。请按名称指明首选端点配置部分。

这是我的 C# 代码:

static void Main(string[] args)
{
    // Anticipate Error
    try
    {
        // Generate SOAP Client
        ServiceReference1.imail_apiSoapClient soapClient = new ServiceReference1.imail_apiSoapClient();

        // Login
        Console.WriteLine("Authenticating");
        soapClient.Authenticate(iMailUser, iMailPass);

        // Proceed If PDF File Exists
        if (File.Exists(PDFFile))
        {
            // Upload PDF File To iMail
            Console.WriteLine("Uploading PDF File");
            soapClient.ProcessPrintReadyPDF(File.ReadAllBytes(PDFFile), "", true);

            // Test Complete
            Console.WriteLine("Done");
        }
        else
        {
            // Log Error
            Console.WriteLine("PDF File [{0}] Does Not Exists", PDFFile);
        }
    }
    catch (Exception ex)
    {
        // Log Error
        Console.WriteLine("Error : "+ ex.Message);
    }

    // End Test
    Console.WriteLine("Press any key to continue ...");
    Console.ReadKey();
}

这就是我将服务引用添加到我的控制台应用程序的方式:

https://i.stack.imgur.com/I6aqI.png

有任何想法吗?

您的 web.config 中的客户端配置在哪里?
@ChrisBint - 没有 web.config,但是有一个 app.config 包含以下内容:pastebin.com/XhbK0YNk
@CodeCaster - 实际上,问题在下一行 because more than one endpoint configuration for th at contract was found 中描述

s
sudil ravindran pk

在您的 App.config 中,您可以看到类似这样的内容

 <client>
      <endpoint address="https://www.imailtest.co.uk/webservice/imail_api.asmx "
        binding="basicHttpBinding" bindingConfiguration="xxxxxxxxxx"
        contract="xxxxxxxxxx" name="xxxxxxxxxxxxx" />
      <endpoint address="https://www.imailtest.co.uk/webservice/imail_api.asmx"
        binding="customBinding" bindingConfiguration="xxxxxxxxxxxxx"
        contract="xxxxxxxxxxx" name="xxxxxxxxxxxxx" />
  </client>

删除第二个端点,现在应该是这样的

<client>
      <endpoint address="https://www.imailtest.co.uk/webservice/imail_api.asmx "
        binding="basicHttpBinding" bindingConfiguration="xxxxxxxxxxxxx"
        contract="xxxxxxxxxxxxxx" name="xxxxxxxxxxxxxxx" />      
  </client>

现在运行代码,希望你的代码能正常工作


为我工作。但是有谁知道为什么需要这一步?为什么 Visual Studio 添加了额外的端点?
不需要这样做,您只需要显式声明 endPointConfigurationName 的名称,意思是 ServiceReference1.svSoapClient service = new ServiceReference1.svSoapClient ("endPointConfigurationName"); instead of ServiceReference1.svSoapClient service = new ServiceReference1.svSoapClient();` 名称可以是App.config 文件中 <endpoint ... name="endPointConfigurationName"> 中的名称。
我注意到,当您在 Visual Studio 中删除 Web 服务时,它不会删除 app.config 文件中的相应代码。
L
Latheesan

我相信通过像这样定义合同名称可以解决问题(基于我的屏幕截图):

ServiceReference1.imail_apiSoapClient soapClient = 
new ServiceReference1.imail_apiSoapClient("imail_apiSoap");

现在,我不再收到错误,并且 api 似乎正在工作。


就我而言,我... (1) 在 Visual Studio 的解决方案资源管理器中显示所有文件(顶部附近的图标)。 (2) 向下钻取,直到我可以看到 configuration.svcinfo。 (3) 打开 configuration.svcinfo 并看到列出了两个端点。 (4) 滚动到最右边以获取我想要的端点的名称(其中的信息看起来像 Sudil 发布的示例)。由于我不想像上面建议的那样删除端点,我只是像 Latheesan 一样添加了我想使用的特定端点的名称。
注意:我只是通过控制台应用程序进行初始测试,因此 web.config 不会在我的场景中应用/存在 - 我相信 app.config 文件也不会。
我有重复,因为一个是为 http 生成的,另一个是为 https 生成的,所以这是该场景的正确解决方案
A
Abdul Khaliq

[解决了!只需在屏幕截图下方的 web 服务的代理类 asp 中添加端点

https://i.stack.imgur.com/XyQJM.png


它不在 bindingConfiguration 属性上,但在 name 属性上。
L
Larry

如果您想在配置文件中保留两个客户端配置,只需创建一个应用程序设置。

因此,您的 App.config 文件将包含此条目,允许您指定所需的端点:

<setting name="EndPoint" serializeAs="String">
    <value>imail_apiSoap</value>
</setting>

所以你可以在你的代码中使用:

ServiceReference1.imail_apiSoapClient soapClient =
    new ServiceReference1.imail_apiSoapClient(Properties.Settings.Default.EndPoint);

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅