我正在尝试编写一个简单的 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
有任何想法吗?
because more than one endpoint configuration for th at contract was found
中描述
在您的 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>
现在运行代码,希望你的代码能正常工作
我相信通过像这样定义合同名称可以解决问题(基于我的屏幕截图):
ServiceReference1.imail_apiSoapClient soapClient =
new ServiceReference1.imail_apiSoapClient("imail_apiSoap");
现在,我不再收到错误,并且 api 似乎正在工作。
[解决了!只需在屏幕截图下方的 web 服务的代理类 asp 中添加端点
https://i.stack.imgur.com/XyQJM.png
如果您想在配置文件中保留两个客户端配置,只需创建一个应用程序设置。
因此,您的 App.config 文件将包含此条目,允许您指定所需的端点:
<setting name="EndPoint" serializeAs="String">
<value>imail_apiSoap</value>
</setting>
所以你可以在你的代码中使用:
ServiceReference1.imail_apiSoapClient soapClient =
new ServiceReference1.imail_apiSoapClient(Properties.Settings.Default.EndPoint);
ServiceReference1.svSoapClient service = new ServiceReference1.svSoapClient ("endPointConfigurationName"); instead of
ServiceReference1.svSoapClient service = new ServiceReference1.svSoapClient();` 名称可以是App.config 文件中<endpoint ... name="endPointConfigurationName">
中的名称。