c#Soap客户端问题 - 找到了合同中的多个端点配置

Lat*_*san 53 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();
}
Run Code Online (Sandbox Code Playgroud)

这就是我将服务引用添加到控制台应用程序的方法:http://i.imgur.com/mKmRyrI.png

有任何想法吗?

sud*_* pk 112

在你的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>
Run Code Online (Sandbox Code Playgroud)

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

<client>
      <endpoint address="https://www.imailtest.co.uk/webservice/imail_api.asmx "
        binding="basicHttpBinding" bindingConfiguration="xxxxxxxxxxxxx"
        contract="xxxxxxxxxxxxxx" name="xxxxxxxxxxxxxxx" />      
  </client>
Run Code Online (Sandbox Code Playgroud)

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

  • 为我工作.但有谁知道为什么需要这一步?为什么Visual Studio会添加额外的终点? (6认同)
  • 没有必要这样做,你只需要明确声明**endPointConfigurationName**的名称,意思是`ServiceReference1.svSoapClient service = new ServiceReference1.svSoapClient("endPointConfigurationName"); 而不是`ServiceReference1.svSoapClient service = new ServiceReference1.svSoapClient();`该名称可以是App.config文件中`<endpoint ... name ="endPointConfigurationName">`中的名称之一. (5认同)

Lat*_*san 30

我相信问题是通过定义合同名称来解决的(基于我的截图):

ServiceReference1.imail_apiSoapClient soapClient = 
new ServiceReference1.imail_apiSoapClient("imail_apiSoap");
Run Code Online (Sandbox Code Playgroud)

现在,我不再收到错误,api似乎正在运行.


Aya*_*ifa 17

[解决了!只需在webservice的代理类asp下面的屏幕截图中添加End point

在此输入图像描述

  • 它不在bindingConfiguration属性上,而是在name属性上. (4认同)