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();
}

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

screenshot

有什么想法吗?

76545 次浏览

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

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

现在,我不再得到一个错误和 api 似乎是工作。

在 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>

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

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

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

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

因此,您可以在代码中使用:

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

[解决! 只需在 webservice 的代理类 ASP 中添加端点 下方屏幕截图

enter image description here

如果 SOAP 服务调用中只有一个端点,则不需要定义 endPoint。但是,如果有更多的,你必须指定端点自己作为一个字符串内的 ServiceReference1.imail_apiSoapClient("myEndPoint"); 另外,右键单击 VS 中的 Connected Service,并选择 Update Service Reference。这将重新下载所有丢失的配置设置。不过,首先清理配置文件是个好主意。